You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

动态分配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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:19:30