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

内存大小分配与释放(Memory Size allocation and deallocation)相关技术咨询

变量数据类型相关内存与程序文件大小问题解答

1. 变量内存空间的分配来源

根据变量的存储类型不同,分配来源分为三类:

  • 局部非静态变量:分配在*栈(Stack)*空间,函数调用时自动分配,函数执行结束后自动回收
  • 全局变量、静态变量(含局部静态、全局静态):分配在静态存储区,程序启动时完成分配,程序退出后才会回收
  • 动态申请的变量(通过malloc/new等接口申请):分配在*堆(Heap)*空间,需要开发者手动调用对应释放接口才会回收

2. 这部分内存占用是否会计入程序文件大小

只有静态存储区中已经初始化的数据会占用程序文件大小:

  • 运行时动态分配的栈、堆内存,以及未初始化的全局/静态变量(存储在.bss段)都不会计入程序文件大小,这类内存的空间是程序加载或运行时由操作系统分配的,不需要存在程序文件中
  • 已经初始化的全局/静态变量、字符串常量、编译期固定常量这类存储在.data段、.rodata段的静态数据,会占用程序文件的实际存储空间

3. 其余代码完全一致的前提下,使用float类型的文件大小是否会比使用int类型多2字节

这个结论不成立,实际情况和变量的存储位置、平台架构、编译参数都有关:

  • 若变量是栈上的局部变量:这类变量的空间是运行时通过栈指针偏移分配的,编译生成的偏移操作指令长度不会受变量类型差异影响,完全不会改变程序文件大小
  • 若变量是静态存储的初始化变量:首先要确认对应平台的类型长度,现代主流桌面平台int和float均占4字节,本身长度无差异,不会产生2字节的差值;就算是16位平台int占2字节、float占4字节,单个变量确实多占2字节空间,但程序文件的存储段默认按4字节或8字节对齐,多出来的2字节如果落在对齐填充的空隙中,也不会导致整个文件大小增加
  • 开启编译优化的场景下,编译器可能会将无修改的变量做常量折叠、指令嵌入处理,也可能抵消类型带来的大小差异

内容的提问来源于stack exchange,提问作者Omkar Bhattarai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:12:02