我试图理解堆栈的布局以及如何分配内存。
我有以下程序,我想知道buffer
数组的起始地址,如果假设堆栈从地址12000开始(例如)。
void function( int a, int b ) {
char buffer[ 512 ];
}
void main() {
function( 1, 2 );
}
答案 0 :(得分:1)
函数中非静态局部变量的地址取决于调用函数时执行点的堆栈状态(SP寄存器的值)。
简单来说,buffer
每次调用function
时都可能有不同的地址。
强调这一点后,您可以使用以下任一选项:
printf("%p", buffer); // applicable only for arrays
printf("%p",&buffer); // applicable for arrays and for non-arrays
答案 1 :(得分:0)
您可以显示运行时使用的地址
#include <stdio.h>
void function( int a, int b ) {
int c;
char buffer[ 512 ];
int d;
printf ("Address of a is %p\n", &a);
printf ("Address of b is %p\n", &b);
printf ("Address of c is %p\n", &c);
printf ("Address of d is %p\n", &d);
printf ("Address of buffer is %p\n", buffer);
}
void main() {
function( 1, 2 );
}