【发布时间】:2020-06-09 22:56:04
【问题描述】:
int* x = nullptr;
class_example* obj = nullptr;
我知道 nullprt 是什么,但是这些变量 x 和 obj 位于哪里?
堆?还是堆栈?
【问题讨论】:
-
不可能从给定的代码示例中分辨出来。
int* x = nullptr;
class_example* obj = nullptr;
我知道 nullprt 是什么,但是这些变量 x 和 obj 位于哪里?
堆?还是堆栈?
【问题讨论】:
指针只是普通变量,碰巧有 值 是其他对象的地址(这些地址可能在堆上)。
所以在这个sn-p中:
int main()
{
int* x = nullptr;
class_example* obj = nullptr;
}
就像常规的局部变量一样,这些指针将位于堆栈上。
【讨论】:
int* x = nullptr; class_example* obj = nullptr;这些变量 x 和 obj 在哪里?
这些变量具有静态存储持续时间,因为它们是在没有 thread_local 关键字的命名空间范围内声明的。语言标准没有指定对象的位置。由语言实现来决定。
堆?还是堆栈?
通常都不会。
例如,在 ELF 可执行格式中,零初始化静态变量将位于名为 BSS 的内存段中。
【讨论】: