我目前正试图再次联系C,内存使用情况和程序集。 我正在使用Ubuntu(64位)虚拟机。 鉴于波纹管堆栈内存地址区域
#include <stdio.h>
int global_var;
int global_init_var=5;
void function(){
int stack_var;
printf("functions stack_var is at",&stack_var);
}
int main(){
int stack_var;
static int static_init_var=5;
static int static_var;
int *heap_var_ptr;
printf("global_init_var is at adress 0x%08x\n",&global_init_var);
printf("static_init_var is at adress 0x%08x\n",&static_init_var);
printf("static_var is at adress 0x%08x\n",&static_var);
printf("global_var is at adress 0x%08x\n",&global_var);
printf("heap_var_ptr is at adress 0x%08x\n",heap_var_ptr);
printf("stack_var is at adress 0x%08x\n",&stack_var);
function();
}
代码中,我得到的输出:
global_init_var是0x00601040
static_init_var是0x00601044
static_var是0x0060104c
global_var在0x00601050
heap_var_ptr是0xb9f8dd00
stack_var是0xb9f8dcfc
功能stack_var是0xb9f8dcd4
我的问题是:为什么堆栈ADRESS区域一样堆地址区域?
正确地打印使用指针['printf'](http://en.cppreference.com/w/c/io/fprintf)与' “%P”'格式。参数是一个'void *'(是的,你需要将指针转换为正确的)。 –
除了其他任何东西,你的代码都有可能使用UB的'printf(“static_var在地址0x%08x \ n”,&static_var);' - >'printf(“static_var在地址%p \ n”, (void *)(&static_var));' – George
您还打印'heap_var_ptr'的未初始化值。由于它没有被初始化,它并没有指向任何地方有效。 –