Just increase the mean city size and see how much longer in takes, even with a single city. Please James, the debug mode in MSVC does not even use inlines, this is about 3-5 times slower in certain cases than the normal release compile. One really needs to do profiling.
Only one city mean 160000 inhabitants 1024*1024 map: Most of the time is spend in bewerte_loc, i.e. in finding suitable place for houses.
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls s/call s/call name
21.31 5.93 5.93 252620208 0.00 0.00 int_noise(long, long)
7.97 8.15 2.22 11095303 0.00 0.00 stadt_t::bewerte_loc(koord, char const*, int)
4.63 9.45 1.29 1218599 0.00 0.00 baum_t::random_tree_for_climate_intern(climate)
2.91 10.26 0.81 1912087 0.00 0.00 baum_t::get_anzahl_besch(climate)
2.71 11.01 0.76 28068912 0.00 0.00 smoothed_noise(int, int)
2.59 11.73 0.72 80003038 0.00 0.00 koord::koord(short, short)
2.51 12.43 0.70 63077281 0.00 0.00 karte_t::ist_in_kartengrenzen(short, short) const
2.44 13.11 0.68 207508567 0.00 0.00 vector_tpl<baum_besch_t const*>::operator[](unsigned int)
2.17 13.72 0.60 260760 0.00 0.00 display_img_nc(short, short, short, unsigned short const*)
2.15 14.32 0.60 62999129 0.00 0.00 planquadrat_t::get_kartenboden() const
1.94 14.86 0.54 58813427 0.00 0.00 karte_t::lookup(koord) const
1.94 15.40 0.54 2423717 0.00 0.00 grund_t::calc_back_bild(signed char, signed char)
1.69 15.87 0.47 166454793 0.00 0.00 baum_besch_t::is_allowed_climate(climate) const
1.62 16.32 0.45 7017228 0.00 0.00 interpolated_noise(double, double)
1.47 16.73 0.41 169585479 0.00 0.00 vector_tpl<baum_besch_t const*>::get_count() const
1.33 17.09 0.37 27906358 0.00 0.00 karte_t::ist_in_gittergrenzen(short, short) const
1.31 17.46 0.36 15396385 0.00 0.00 simrand_plain()
1.08 17.76 0.30 17826879 0.00 0.00 simrand(unsigned int)
0.90 18.01 0.25 42976248 0.00 0.00 karte_t::lookup_kartenboden(koord) const
0.86 18.25 0.24 744919 0.00 0.00 stadt_t::baue()
0.79 18.47 0.22 8078627 0.00 0.00 dingliste_t::get_top() const
0.72 18.67 0.20 1169538 0.00 0.00 perlin_noise_2D(double, double, double)
0.68 18.86 0.19 1241397 0.00 0.00 karte_t::ist_platz_frei(koord, short, short, int*, climate_bits) const
0.66 19.05 0.19 21051684 0.00 0.00 linear_interpolate(double, double, double)
0.63 19.22 0.17 2052633 0.00 0.00 baum_t::plant_tree_on_coordinate(karte_t*, koord, unsigned char)
0.56 19.38 0.16 24675 0.00 0.00 MTgenerate()
0.54 19.52 0.15 2372596 0.00 0.00 grund_besch_t::get_ground_tile(signed char, short)
0.50 19.66 0.14 14654207 0.00 0.00 koord3d::get_2d() const
0.50 19.81 0.14 14461618 0.00 0.00 operator+(koord const&, koord const&)
0.50 19.95 0.14 162026 0.00 0.00 get_aus_liste(vector_tpl<haus_besch_t const*> const&, int, unsigned short, climate)
0.47 20.07 0.13 1054850 0.00 0.00 karte_t::raise_clean(short, short, short)
0.47 20.20 0.13 68 0.00 0.07 baum_t::create_forest(karte_t*, koord, koord)
0.45 20.33 0.13 2294136 0.00 0.00 karte_t::max_hgt(koord) const
0.45 20.45 0.13 925329 0.00 0.00 pixcopy(unsigned short*, unsigned short const*, unsigned int)
0.43 20.57 0.12 6256792 0.00 0.00 operator==(koord const&, koord const&)
0.43 20.70 0.12 1218599 0.00 0.00 baum_t::baum_t(karte_t*, koord3d)
0.43 20.82 0.12 2 0.06 0.90 karte_t::cleanup_karte(int, int)
0.43 20.93 0.12 2 0.06 4.37 karte_t::distribute_groundobjs_cities(int, short, short)
0.39 21.05 0.11 3607547 0.00 0.00 freelist_t::gimme_node(unsigned int)
0.39 21.16 0.11 2290187 0.00 0.00 dingliste_t::loesche_alle(spieler_t*, unsigned char)
0.38 21.26 0.11 31 0.00 0.00 setsimrand(unsigned int, unsigned int)
0.36 21.36 0.10 553433 0.00 0.00 binary_heap_tpl<route_t::ANode*>::pop()
0.36 21.46 0.10 21986 0.00 0.00 display_text_proportional_len_clip(short, short, char const*, int, unsigned short, long)
0.36 21.56 0.10 32 0.00 0.06 wegbauer_t::intern_calc_route(vector_tpl<koord3d> const&, vector_tpl<koord3d> const&)
0.36 21.66 0.10 _Unwind_SjLj_Unregister
0.32 21.75 0.09 8306545 0.00 0.00 haus_besch_t::is_allowed_climate(climate) const
all other are less than 0.3% contribution
So height calculation takes aparently a lot of time on large maps (21 second!) and next is the test if a tile is suitable for building/road etc (which cannot be skipped, since it is at the core of the town generation rules.)