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

相同大小的动态与静态char数组字节分配为何存在差异?

问题原因说明

这个现象的核心是sizeof运算符的计算规则,以及两个变量的类型本质不同,和内存分配在堆还是栈没有直接关系:

  • 第一个变量dynamicCharArr的类型是char类型指针,不是数组类型。sizeof对指针变量求值时,返回的是指针本身占用的内存大小:64位系统下所有指针固定占8字节,32位系统下固定占4字节,和指针指向的堆内存大小无关。你用new char[15]申请的15字节是堆区的独立空间,指针仅存储了这块空间的首地址,sizeof不会读取指针指向的内存的总大小。
  • 第二个变量staticCharArr的类型是长度为15的char数组,属于栈上分配的原生数组类型。sizeof对原生数组类型求值时,会返回整个数组占用的总字节数,单个char占1字节,因此结果为15,符合预期。

补充说明:C/C++中数组和指针并非等价类型,只有当数组作为函数参数传递时才会自动退化为指针,其余场景下二者类型完全独立,sizeof的计算规则也完全不同。如果需要获取动态申请的数组的总大小,需要手动记录申请时的长度,无法通过sizeof运算符直接获取。

内容的提问来源于stack exchange,提问作者Vanessa Zambrano

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:39:00