I tried 4096x4096 512xcities 128xindustries with default city size equals 1600, and it took about 2 min on release build.
When I increase size of cities to 50000 on choice map, it took about 15 min to create ( ~50min on gprof build ).
Run on:
AMD 64bit 5200+ (2Cores), 4GB Ram
Ubuntu 9.04 32bit
Simutrans Experimental 5.1
Gprof output from 4096x4096 512xcities 128xindustries with median citizens per city 50000 below
Memory consumed by simutrans after creating map was 830 MB.
Profile contains:
1. starting simutrans ( ~30s)
2. creating map ( ~50min)
3. about ~3min freeplay without user action
4. saving map (~2min)
5. game exit ( ~20 s )
Flat profile:
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls Ks/call Ks/call name
13.00 117.11 117.11 549407190 0.00 0.00 stadt_t::bewerte_loc(koord, char const*, int)
10.64 212.96 95.85 364706243 0.00 0.00 karte_t::lookup(koord) const
6.85 274.68 61.72 14224 0.00 0.00 karte_t::sync_step(long, bool, bool)
5.14 321.02 46.34 3704417418 0.00 0.00 int_noise(long, long)
5.13 367.21 46.20 3983280983 0.00 0.00 karte_t::lookup_kartenboden(koord) const
4.85 410.87 43.65 237557 0.00 0.00 slist_tpl<weg_t*>::remove(weg_t* const&)
3.55 442.85 31.98 6996965 0.00 0.00 display_img_nc(short, short, short, unsigned short const*)
2.99 469.74 26.89 31000511 0.00 0.00 planquadrat_t::get_kartenboden() const
2.64 493.49 23.75 431849510 0.00 0.00 karte_t::ist_in_kartengrenzen(short, short) const
2.51 516.10 22.61 417116 0.00 0.00 bauplatz_mit_str****e_sucher_t::find_dist_next_special(koord) const
1.73 531.66 15.56 2424424730 0.00 0.00 ding_t::get_pos() const
1.24 542.81 11.14 24962556 0.00 0.00 stadt_t::baue()
1.04 552.19 9.38 967778 0.00 0.00 hashtable_tpl<sync_steppable*, sync_steppable*, ptrhash_tpl<sync_steppable*> >::put(sync_steppable*, sync_steppable*)
0.94 560.68 8.49 915996195 0.00 0.00 grund_t::get_hoehe() const
0.94 569.17 8.49 2637349483 0.00 0.00 operator==(koord const&, koord const&)
0.94 577.62 8.45 411601927 0.00 0.00 smoothed_noise(int, int)
0.90 585.75 8.12 606167970 0.00 0.00 simrand(unsigned int)
0.80 592.98 7.23 1392724500 0.00 0.00 grund_t::get_weg(waytype_t) const
0.78 600.02 7.04 320128882 0.00 0.00 ding_t::get_flag(ding_t::flag_values) const
0.77 607.00 6.98 2 0.00 0.38 karte_t::distribute_groundobjs_cities(int, short, short)
0.76 613.85 6.85 2349165751 0.00 0.00 weighted_vector_tpl<gebaeude_t*>::const_iterator::operator++()
0.75 620.63 6.79 328759854 0.00 0.00 planquadrat_t::get_boden_in_hoehe(short) const
0.75 627.37 6.73 2349165751 0.00 0.00 koord_distance(koord3d, koord)
0.74 634.05 6.68 542 0.00 0.00 slist_tpl<koord>::at(unsigned int) const
0.71 640.46 6.41 330637814 0.00 0.00 karte_t::lookup(koord3d) const
0.71 646.83 6.37 313375935 0.00 0.00 fussgaenger_t::sync_step(long)
0.65 652.68 5.86 755799640 0.00 0.00 slist_iterator_tpl<hashtable_tpl<sync_steppable*, sync_steppable*, ptrhash_tpl<sync_steppable*> >::node_t>::next()
0.63 658.34 5.65 210929037 0.00 0.00 grund_t::get_vmove(koord) const
0.60 663.71 5.38 16777215 0.00 0.00 planquadrat_t::rdwr(karte_t*, loadsave_t*, koord)
0.60 669.08 5.37 316523988 0.00 0.00 vehikel_basis_t::fahre_basis(unsigned int)
0.54 673.96 4.88 1126814832 0.00 0.00 grund_t::hat_weg(waytype_t) const
0.49 678.38 4.42 3085439 0.00 0.00 get_aus_liste(vector_tpl<haus_besch_t const*> const&, int, unsigned short, climate)
0.48 682.71 4.33 2755450246 0.00 0.00 koord::koord(short, short)
0.47 686.91 4.21 2396339 0.00 0.00 brueckenbauer_t::finde_ende(karte_t*, koord3d, koord, bruecke_besch_t const*, char const*&, bool)
0.45 690.96 4.04 102900481 0.00 0.00 interpolated_noise(double, double)
0.44 694.93 3.98 42030290 0.00 0.00 binary_heap_tpl<route_t::ANode*>::pop()
0.44 698.89 3.96 137476790 0.00 0.00 stadt_t::bewerte_pos(koord, char const*)
0.44 702.82 3.92 2349582813 0.00 0.00 weighted_vector_tpl<gebaeude_t*>::const_iterator::operator!=(weighted_vector_tpl<gebaeude_t*>::const_iterator const&)
0.42 706.64 3.82 542 0.00 0.00 slist_tpl<koord>::remove(koord const&)
0.41 710.35 3.71 46569685 0.00 0.00 grund_t::calc_back_bild(signed char, signed char)
0.41 714.03 3.69 2349165737 0.00 0.00 weighted_vector_tpl<gebaeude_t*>::const_iterator::operator*() const
0.39 717.56 3.53 58107946 0.00 0.00 pixcopy(unsigned short*, unsigned short const*, unsigned int)
0.38 720.95 3.39 203741444 0.00 0.00 karte_t::ist_in_kartengrenzen(koord) const
0.37 724.30 3.35 5442 0.00 0.00 wegbauer_t::intern_calc_route(vector_tpl<koord3d> const&, vector_tpl<koord3d> const&)
0.37 727.61 3.31 105455715 0.00 0.00 grund_t::get_neighbour(grund_t*&, waytype_t, koord) const
0.36 730.82 3.21 1162947311 0.00 0.00 koord3d::get_2d() const
0.34 733.88 3.06 113961692 0.00 0.00 planquadrat_t::get_boden_count() const
0.33 736.85 2.98 23772308 0.00 0.00 hashtable_tpl<char const*, groundobj_besch_t*, stringhash_t>::empty() const
0.32 739.76 2.91 326629625 0.00 0.00 hashtable_iterator_tpl<sync_steppable*, sync_steppable*, ptrhash_tpl<sync_steppable*> >::next()
0.29 742.34 2.58 2401002969 0.00 0.00 slist_tpl<hashtable_tpl<char const*, groundobj_besch_t*, stringhash_t>::node_t>::empty() const
0.28 744.90 2.56 394409010 0.00 0.00 karte_t::lookup_hgt(koord) const
0.27 747.34 2.44 680559013 0.00 0.00 route_t::ANode::operator<=(route_t::ANode) const
0.25 749.63 2.29 308512111 0.00 0.00 stadt_t::bewerte_str****e(koord, int, char const*)
0.25 751.89 2.27 561700816 0.00 0.00 simrand_plain()
0.23 753.97 2.07 1672401 0.00 0.00 weighted_vector_tpl<gebaeude_t*>::remove_at(unsigned int)
0.23 756.00 2.04 2 0.00 0.06 karte_t::cleanup_karte(int, int)
0.22 758.00 2.00 40583965 0.00 0.00 wegbauer_t::is_allowed_step(grund_t const*, grund_t const*, long*)
0.20 759.85 1.84 900162 0.00 0.00 MTgenerate()
0.20 761.67 1.82 507734363 0.00 0.00 haus_besch_t::is_allowed_climate(climate) const
0.19 763.38 1.71 15174334 0.00 0.00 karte_t::ist_platz_frei(koord, short, short, int*, climate_bits) const
0.18 765.02 1.65 50622775 0.00 0.00 karte_t::access(koord)
0.18 766.65 1.63 426771711 0.00 0.00 ptrhash_tpl<sync_steppable*>::comp(sync_steppable*, sync_steppable*)
0.18 768.28 1.63 342388308 0.00 0.00 koord3d::koord3d()
0.18 769.91 1.63 329983232 0.00 0.00 ding_t::set_flag(ding_t::flag_values)
0.18 771.53 1.61 454396529 0.00 0.00 slist_iterator_tpl<hashtable_tpl<sync_steppable*, sync_steppable*, ptrhash_tpl<sync_steppable*> >::node_t>::get_current() const
0.18 773.12 1.59 546432400 0.00 0.00 karte_t::ist_in_gittergrenzen(short, short) const
0.17 774.68 1.56 91 0.00 0.00 setsimrand(unsigned int, unsigned int)
0.17 776.23 1.54 685454 0.00 0.00 display_img_wc(short, short, short, unsigned short const*)
0.17 777.75 1.53 967831 0.00 0.00 hashtable_tpl<sync_steppable*, sync_steppable*, ptrhash_tpl<sync_steppable*> >::remove(sync_steppable*)
0.17 779.27 1.52 600437204 0.00 0.00 operator==(koord const&, koord const&)
0.17 780.79 1.51 811692728 0.00 0.00 grund_t::get_grund_hang() const
0.17 782.29 1.50 16781312 0.00 0.00 planquadrat_t::~planquadrat_t()
0.17 783.78 1.50 298990603 0.00 0.00 slist_iterator_tpl<hashtable_tpl<sync_steppable*, sync_steppable*, ptrhash_tpl<sync_steppable*> >::node_t>::access_current()
0.16 785.25 1.47 50361612 0.00 0.00 karte_t::calc_natural_slope(koord) const
0.16 786.65 1.40 339770087 0.00 0.00 dingliste_t::bei(unsigned char) const
0.15 788.02 1.36 163078008 0.00 0.00 dingliste_t::get_top() const
0.15 789.38 1.35 44949134 0.00 0.00 binary_heap_tpl<route_t::ANode*>::insert(route_t::ANode*)
0.15 790.72 1.34 326615405 0.00 0.00 hashtable_iterator_tpl<sync_steppable*, sync_steppable*, ptrhash_tpl<sync_steppable*> >::get_current_value() const
0.15 792.06 1.34 27655731 0.00 0.00 hausbauer_t::get_special(int, haus_besch_t::utyp, unsigned short, bool, climate)
0.15 793.38 1.32 174228472 0.00 0.00 marker_t::ist_markiert(grund_t const*) const
0.15 794.70 1.31 17150081 0.00 0.00 perlin_noise_2D(double, double, double)
0.13 795.91 1.22 62590928 0.00 0.00 karte_t::max_hgt(koord) const
0.13 797.12 1.21 245128128 0.00 0.00 operator+(koord const&, koord const&)
0.13 798.33 1.21 804865381 0.00 0.00 boden_t::get_typ() const
0.13 799.52 1.20 594593471 0.00 0.00 slist_iterator_tpl<haus_besch_t const*>::next()
0.13 800.71 1.19 146899693 0.00 0.00 operator+(koord3d const&, koord const&)
0.13 801.88 1.18 non-virtual thunk to fussgaenger_t::sync_step(long)
0.12 803.00 1.11 179042014 0.00 0.00 boden_t::ist_natur() const
0.12 804.11 1.11 34200191 0.00 0.00 freelist_t::gimme_node(unsigned int)
0.12 805.15 1.04 14227 0.00 0.00 karte_ansicht_t::display(bool)
0.11 806.17 1.02 414274897 0.00 0.00 grund_t::get_weg_hang() const
0.11 807.18 1.01 464087130 0.00 0.00 koord3d::koord3d(short, short, signed char)
0.11 808.20 1.01 16789631 0.00 0.00 karte_t::raise_clean(short, short, short)
EDIT: profile result moved in code section