Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C语言分配内存_C - Fatal编程技术网

用C语言分配内存

用C语言分配内存,c,C,正如我在C中所知道的: a。全局变量和静态变量位于数据段 b。调用函数时,会在堆栈上分配内存来保存 参数值、局部变量和调用的地址 作用 c。根据最大对齐要求对齐结构 它的成员 我想知道这些定义基于什么? 有关于这些的手册或书籍吗?这些主要是实现细节,因此最好查阅C编译器的手册/文档。您可能想了解gcc C可执行文件的内存布局。我想这会有点帮助 这些都是纯粹的实施细节;不能保证您甚至有一个数据段,也不能保证所有函数参数都通过堆栈传递(它们可能通过寄存器传递) 这是由处理器体系结构(x86、SPAR

正如我在C中所知道的:

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

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

c。根据最大对齐要求对齐结构 它的成员

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

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

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

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


这是由处理器体系结构(x86、SPARC、MIPS、PA-RISC、Power)决定的,在某种程度上是由操作系统决定的,因此您需要从您感兴趣的体系结构的开发人员指南开始,例如。

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

您所说的“我想知道这些定义基于什么?”是什么意思?我想知道编译器(gcc)根据初始化数据段中的全局变量和静态变量,在C中分配了什么(手动)内存?根据ABI的说法?