extern map<string,string> city ;voID region_init_0 (voID) { city["abc01"] = "Brussels" ;city["xyz03"] = "LIEge" ;...}
.cpp文件的长度为40 KB.编译后,我得到一个2.2 MB的.obj文件.与其他模块链接后,.exe文件也比我添加地图前长2 MB.我不明白为什么我在目标代码的长度和ASCII字符串的总长度之间得到50的比率.
我怎么能减少呢?我想必须有更聪明的方法来初始化一个在程序执行期间保持不变的地图.
谢谢.
@H_403_4@解决方法 只需使用外部函数并将原始cstrings传递给它:extern std::map<std::string,std::string> city;/* somehow make sure it cannot be inlined */extern voID AddCity(const char* const a,const char* const b) __attribute__((__noinline__));voID region_init_0 (voID) { AddCity("abc01","Brussels"); AddCity("xyz03","LIEge"); ...}extern voID AddCity(const char* const a,const char* const b) { city[a] = b;}
我在我的系统上模拟了你的情况,它将可执行文件的大小从924K减少到100K(剥离).模拟的一个区别是您将导出更多字符串,因此比率将不相等.
@H_403_4@ @H_403_4@ @H_403_4@ @H_403_4@ 总结以上是内存溢出为你收集整理的c – 地图初始化:目标代码比源代码大50倍全部内容,希望文章能够帮你解决c – 地图初始化:目标代码比源代码大50倍所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)