我的编译器是 g++ 4.7.3
long i = 2222;
const long& lref = i;
const int& iref = i;
printf("i=%p lref=%p iref=%p \n", &i , &lref, &iref);
结果是
i=0xbfd78760 lref=0xbfd78760 iref=0xbfd78764
为什么iref
的地址高于i
我觉得可能是这样的:
当 const int&
引用 long
时,它就像
int temp = i
const int& iref = temp;
============================================= ===========
代码2
但是当代码像
long i = 2222;
const long& lref = i;
const int& iref = i;
int a = 10;
int b = 10;
printf("i=%p lref=%p iref=%p a=%p b=%p\n", &i , &lref, &iref, &a, &b);
结果是
i=0xbfade768 lref=0xbfade768 iref=0xbfade774 a=0xbfade76c b=0xbfade770
为什么a
和b
在栈中的地址低于iref
?
============================================= ===========
代码3
当代码像
long i = 2222;
const long& lref = i;
const int& iref = i;
printf("i=%p lref=%p iref=%p \n", &i , &lref, &iref);
结果是
i=0xbfbe3f84 lref=0xbfbe3f84 iref=0xbfbe3f83
当iref
的类型为char
时,为什么iref
的地址低于i
?
谁能告诉我为什么,谢谢!
最佳答案
你的直觉是对的,iref
确实是分配了一个临时的独立内存位置。
内存地址的顺序由编译器决定,显然代码生成是这样对堆栈进行排序的。我不知道为什么 g++ 会这样命令它 - 您可能必须深入研究 g++ 内部文档甚至源代码。
但是请记住,在大多数系统中,如果堆栈上的地址较低,则意味着堆栈上的值较高,因为堆栈通常向下增长。
关于c++ - 为什么在 g++4.7.3 中当 const 引用释放到不同类型时内存分配是这样的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18402691/