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

C语言中已初始化局部变量的值在栈分配前存储于何处?

关于局部变量初始值存储位置的解答

你的猜测完全准确!咱们来拆解一下这个过程:

当你编写void foo() { uint8_t x = 2u; }这段代码后,编译器在编译阶段就会把常量2u打包进程序的文本段(也叫代码段)——这是一块只读的非易失性内存区域,专门用来存放程序的指令和固定不变的常量数据。

等到程序运行、调用foo函数时,会发生这几步:

  • 首先在栈上为局部变量x分配1字节的内存空间(对应uint8_t的大小)
  • 接着从文本段里取出预先存好的2u,把它复制到栈上x对应的位置
  • 当函数执行完返回时,栈上x的空间会被标记为可复用,但文本段里的2u会一直留在那里,直到整个程序退出

额外补充个小细节:如果局部变量没有显式初始化(比如写uint8_t x;),那它的值就是栈上的随机垃圾数据——因为这时候编译器不会从文本段复制任何初始值,直接用栈空间里原来残留的内容。

当然,不同编译器或目标平台可能有一些细微的实现差异,但核心逻辑是统一的:显式初始化用的常量值,会先存在只读的文本段中,函数调用时再复制到栈上的局部变量位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:23:56