-3

正如我在 C 中所知道的:

一个。全局变量和静态变量位于数据段

湾。调用函数时,会在堆栈上分配内存来保存参数值、局部变量和调用函数的地址

C。结构根据其成员的最大对齐要求进行对齐。

我想知道这些基于什么来定义?有没有关于这些的手册或书籍?

4

4 回答 4

2

这些主要是实现细节,所以最好查阅你的 C 编译器的手册/文档。

于 2013-09-16T10:32:27.650 回答
0

这些都是纯粹的实现细节;不能保证您甚至一个数据段,也不能保证所有函数参数都通过堆栈传递(它们可能通过寄存器传递)。

这取决于处理器架构(x86、SPARC、MIPS、PA-RISC、Power),并在某种程度上取决于操作系统,因此您需要从您感兴趣的架构的开发人员指南开始,例如Intel .

于 2013-09-16T11:23:21.407 回答
0

编译器文档。任何关于 x86 Assembly 的书都可以很好地了解幕后一切是如何工作的。一些编译器允许在其 C 代码中进行内联汇编,因此您可以尝试在汇编中重写一些 C 代码,以查看是否可以匹配编译器正在执行的操作。它应该为您提供堆栈、对齐等方面的工作知识。

于 2013-09-16T11:29:55.673 回答
0

您可能想了解 gcc 的 C 可执行文件的内存布局。我认为这会有所帮助。C中的内存布局

于 2013-09-16T11:20:21.047 回答