我想了解“C”程序如何运行并将数据存储在机器中。所以我从这里查看了 C 的内存布局,并在我的 64 位机器上遵循了相同的指令。
首先,当我编写程序(main
只有return 0;
)并使用size
可执行文件的命令时:它在文本和数据段中显示出很多差异。
text data bss dec hex filename
10648 2400 2640 15688 3d48 33.exe
但在上面提到的网站上显示:
text data bss dec hex filename
960 248 8 1216 4c0 memory-layout
第一个问题:
负责内存分配的因素(硬件/软件)是什么?dec
布局中指的是什么?/问题到此结束
但首先我忽略了这一点并开始声明变量(全局和静态)以查看它们的存储位置。我在这个阶段面临一个问题。
对于此代码:
#include <stdio.h>
int global;
int main(void) {
//static int x;
return 0;
}
我得到的输出为:
text data bss dec hex filename
10648 2400 2656 15704 3d48 33.exe
那是因为我声明(未初始化)一个全局变量,这就是为什么将 16 个字节(int-64bit)的内存块添加到它bss
所以它从 2640 变成 2656(第一个示例)我理解这一点。
Q2:但是当我添加static int x
它时,它不再添加内存块bss
。这是预期的吗?
text data bss dec hex filename
10648 2400 2656 15704 3d48 33.exe
Q3:最后当我用 初始化全局变量时20
,data
增加(预期)并且dec
也增加了为什么?
text data bss dec hex filename
10648 2416 2656 15720 3d48 33.exe
我知道我在这里问了很多问题,但我想知道这种内存管理在 C 中是如何工作的。
阿里加托:)