为什么size命令没有列出任何可执行文件或目标文件的堆栈或堆段?

时间:2018-04-11 06:09:43

标签: c memory-management operating-system stack heap

在Unix系统中使用带有可执行文件或目标文件的size命令时,我们以文本段和数据段的大小形式输出。为什么不显示堆或堆栈段的输出?以下是size命令的输出

 $ size hello_world-1 hello_world-1.o 


text   data   bss    dec   hex   filename
 916    256     4   1176   498   hello_world-1
  48      0     0     48    30   hello_world-1.o

3 个答案:

答案 0 :(得分:1)

堆和堆栈适用于进程,它们是(通常)由操作系统加载到内存中的可执行文件,而不是直接存储在文件系统上的文件。

此外,堆栈和堆大小在进程的生命周期内可能会有所不同,因此通常无法预测某个可执行文件在作为进程加载时将占用多少堆栈或堆。

这就是为什么像size这样的命令除了文件本身的代码/数据大小之外,还不是为了显示这些信息。

答案 1 :(得分:1)

因为部分用于程序运行时的动态内存分配,并且内存将在运行时分配,因为它是动态权限。对于 stack ,存储在那里的变量只有本地范围或块范围,并且它们也存在,直到程序运行。

是的,堆栈,堆,数据代码内存部分位于正在运行的进程或程序的上下文中。

答案 2 :(得分:0)

它们是操作系统进程,不适用于查找大小!