动态分配long long数组后,sizeof(buffer)返回4字节的原因咨询
堆内存分配完全没问题,问题出在对
sizeof的理解上! 嘿,别慌,你完全误会了sizeof(buffer)的意义——堆内存绝对能分配远大于4字节的空间,你写的代码其实已经成功申请了50×8=400字节的堆内存啦!
核心误区在这里:
- 你定义的
buffer是一个指针变量(long long*类型),而非数组本身。在32位系统中,所有指针的大小都是4字节(64位系统则是8字节),所以sizeof(buffer)返回的是指针自身的大小,和它指向的堆内存块的大小没有任何关系。
那怎么知道自己实际分配了多少内存呢?
- 直接用
n * sizeof(long long)计算就行,也就是50 * 8 = 400字节,这才是你从堆上拿到的总空间。
顺便补充个小细节:如果是在栈上直接声明数组,比如:
long long buffer[50];
这时候sizeof(buffer)就会返回400字节,因为此时buffer是数组类型,sizeof会计算整个数组的总字节数。
内容的提问来源于stack exchange,提问作者Skeptical Ant
相关产品推荐
相关产品推荐

