【问题标题】:size of text area文本区域的大小
【发布时间】:2012-06-27 19:41:20
【问题描述】:

考虑以下程序:

#include <stdio.h>

int main(void)
{
    return 0;
}

当我运行以下命令时:

gcc memory-layout.c -o 内存布局 大小内存布局

我得到的输出为:

文本数据 bss dec 十六进制文件名 960 248 8 1216 4c0 内存布局

由于文本区域包含程序的可执行指令,为什么输出显示文本区域的大小为 960,据我所知,相对于指令的大小来说太大了。

【问题讨论】:

标签: c gcc memory-layout


【解决方案1】:

原因可能是因为程序的实际开始并不是真正的main函数,而是在链接阶段添加的一段代码。此代码在调用 main 函数之前设置库、清除 BSS 段和其他初始化。当您从main 返回时,还有一些代码可确保正确清理所有内容。

【讨论】:

  • 知道了.. 你能再澄清一个疑问吗,main里面的return语句的确切用途是什么?在旧版本的编译器 [x86] 中,没有必要。出于什么目的,它被包含在更高版本的编译器中?我听说它告诉操作系统程序已成功执行。那为什么只有0,为什么不是其他整数呢?除了这个还有其他原因吗?
  • @algogeek main 中的 return 是必需的,因为 main 被声明为返回 int,它在标准中。你可以返回任何你想要的整数,只是从历史上看,零意味着一切正常,而正值表示失败。当程序作为命令执行时,实际上这个返回值就是 shell 中的错误代码。
  • @algogeek:main 中的return 语句为程序提供了退出代码。如果您在操作系统下运行,则可以将该值报告给启动您的程序的任何人。从 C99 开始,return 语句是可选的,如果执行到 main 的末尾,则行为被定义为与返回 0 相同。
猜你喜欢
  • 1970-01-01
  • 2013-09-17
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多