You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 02:35:55