堆栈上数组与堆上数组的 sizeof()
sizeof() on arrays on stack vs. on heap
我正在学习 C++,我注意到 sizeof()
-operator 在堆栈和堆上的数组上的工作方式不同。例如:
int onStack[5];
int* onHeap = new int[5];
std::cout << "sizeof(onStack)=" << sizeof(onStack) << std::endl;
std::cout << "sizeof(onHeap)=" << sizeof(onHeap) << std::endl;
生成输出
sizeof(onStack)=20
sizeof(onHeap)=4
然而,据我所知,onStack
和 onHeap
都只是 int
指针,对吧?我知道你不应该/不能真正使用 sizeof()
运算符来获取数组的大小,但出于好奇,为什么它的行为会有所不同,具体取决于数组是否打开栈上还是堆上?
不,onStack
是一个 int[5]
到指针的衰减。它们不相同,因此存在 sizeof
差异。
与堆栈上和堆上无关,实际上只是类型差异。
我正在学习 C++,我注意到 sizeof()
-operator 在堆栈和堆上的数组上的工作方式不同。例如:
int onStack[5];
int* onHeap = new int[5];
std::cout << "sizeof(onStack)=" << sizeof(onStack) << std::endl;
std::cout << "sizeof(onHeap)=" << sizeof(onHeap) << std::endl;
生成输出
sizeof(onStack)=20
sizeof(onHeap)=4
然而,据我所知,onStack
和 onHeap
都只是 int
指针,对吧?我知道你不应该/不能真正使用 sizeof()
运算符来获取数组的大小,但出于好奇,为什么它的行为会有所不同,具体取决于数组是否打开栈上还是堆上?
不,onStack
是一个 int[5]
到指针的衰减。它们不相同,因此存在 sizeof
差异。
与堆栈上和堆上无关,实际上只是类型差异。