【发布时间】:2014-12-21 23:33:53
【问题描述】:
我正在尝试了解堆栈的布局以及内存的分配方式。
我有以下程序,如果假设堆栈从地址 12000 开始(例如),我想知道 buffer 数组的起始地址。
void function( int a, int b ) {
char buffer[ 512 ];
}
void main() {
function( 1, 2 );
}
【问题讨论】:
-
您必须编译代码并检查二进制文件(或打印出
function中的地址)。标准 C 中没有任何内容可以让您计算该地址,它完全取决于编译器/平台。 -
@1336087 栈通常是向下增长的,你没有考虑main的函数调用(这取决于地址有多大)。
-
"我想知道缓冲区数组的起始地址" 你不能,因为你不知道你的特定编译器的特定版本决定在你的特定程序上做什么一周中特定日期的优化级别。也许它根本没有为
buffer分配任何空间,因为它没有被使用。或者它可能因为它是星期天而在堆上分配它,并且因为它可以。 -
我使用的是 Fedora 32 位。 gdb 会帮助我了解完整的堆栈吗?
-
@ooga:它是特定于架构的。
标签: c memory-management stack