为何C++空程序占用204KB堆空间而C程序不需要?
关于g++编译空程序额外分配204KB堆空间的疑问
观察如下空程序:
int main() { return 0; }
使用g++ main.cpp && strace ./a.out编译并通过strace分析输出,发现最后几行存在额外的brk调用,将堆空间扩展了204KB(计算:0xF05000 - 0xED2000 转换为十进制为204KB),即使添加-O3优化选项,结果仍一致。
而使用gcc main.cpp && strace ./a.out编译时,输出中无该brk调用。
为进一步验证,替换为包含pmap调用的程序:
#include <iostream> #include <unistd.h> int main() { char buf[1024]; sprintf(buf, "pmap -XX %u", getpid()); std::system(buf); return 0; }
可见g++编译的程序[heap]大小为204KB,gcc编译的程序pmap输出中甚至无[heap]行。
注:意外发现gcc处理#include <iostream>和std::system无问题。
现在好奇这204KB堆空间的用途是什么?
内容的提问来源于stack exchange,提问作者ABu
相关产品推荐
相关产品推荐

