You need to enable JavaScript to run this app. C++函数内声明的局部变量内存分配位于栈还是堆?
优惠活动
大模型
产品
解决方案
定价
更多

C++函数内声明的局部变量内存分配位于栈还是堆?

C++函数内局部变量的内存分配问题解答

针对你给出的示例代码,number 变量的内存默认分配在栈上。

具体原因

  • C++ 中,没有显式加static修饰、也没有通过new/malloc等接口动态申请的局部自动变量,在GCC、Clang、MSVC等主流编译器的通用实现中,都会被分配在栈内存上。
  • 你提到的“函数执行上下文存放在栈中”的认知是正确的:栈本身就是为函数调用机制设计的,每次函数调用会生成独立的栈帧,栈帧内除了存放函数返回地址、调用时的寄存器上下文,就包含该函数内所有局部自动变量的存储空间。

容易混淆的场景

  • 只有显式动态分配的对象才会放在堆上:如果代码改写为A* number = new A();,此时栈上仅存放指向堆对象的指针number本身,真正的A类实例内存才是在堆上分配的。
  • 补充说明:C++ 官方标准并没有强制规定栈、堆的具体实现逻辑,上述分配规则是当前工业界编译器的通用实现,核心是利用栈的高效分配释放能力处理函数内的固定大小局部变量,利用堆的动态扩展能力处理运行时大小可变或需要跨函数生命周期存在的对象。

内容的提问来源于stack exchange,提问作者Umar Farooq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.08 01:27:02