【发布时间】:2020-05-14 08:00:23
【问题描述】:
#include <stdio.h>
#include <array>
#include <vector>
std::vector<int> foo() {
int i;
std::vector<int> a(100);
printf("%p, %p, %p\n", &i, &a, &(a[0]));
return a;
}
int main() {
int i;
std::vector<int> b = foo();
printf("%p, %p, %p\n", &i, &b, &(b[0]));
}
为什么a和b上面的地址是一样的?这是某种“跨堆栈框架”优化吗?即使我使用-O0 选项,结果也是一样的。
输出:
$ vim main.cpp
$ cc -std=c++11 -lc++ main.cpp
$ ./a.out
0x7ffee28d28ac, 0x7ffee28d28f0, 0x7ff401402c00
0x7ffee28d290c, 0x7ffee28d28f0, 0x7ff401402c00
$
【问题讨论】:
-
在堆上(即
main之外)声明b时也是这种情况吗?