王剑编程网

分享专业编程知识与实战技巧

变量覆盖的内部原理是什么?为什么C语言全局或静态变量初始值是0?

若文章对您有帮助,欢迎关注 程序员小迷 。助您在编程路上越走越好!




编程语言变量覆盖的内部原理是什么?


一些编程语言,支持内部作用域变量覆盖外层同名变量。这种机制,方便了变量命名的困扰,在某些情况下,方便了程序员。编译器支持变量覆盖,一般是利用链表结构保存所有符号(Symbol, 变量信息的结构体),对于有相同名称的符号,有指针变量指向上一级(外部作用域)的符号。当离开作用域后,直接移除对应符号信息,即达到了变量覆盖。


为什么C语言局部变量初始值是随机的?


从汇编角度,局部变量的分配仅仅是堆栈指针SP的变化,从指令角度,这样是最简单省事的。C语言为了高效率,没有增加局部变量默认初始化。


为什么C语言全局或静态变量初始值是0?


首先要理解,这些变量是如何被存储和加载的。全局或静态变量如果有明确初始化值(不为0),会被分配到.data区,对应目标文件或者可执行文件的.data区,它们是存储在文件中的。在操作系统加载程序时,会将它们拷贝到内存对应的区域。对于初始化为0或者没有写初始化的,根据编译器优化的方式,很可能放到BSS段,注意这个段并不会在文件.bss区分配空间,只是指定了总长度。因为,在操作系统加载的时候,会直接将一整块BSS在内存中初始化为全0. 是不是一点不浪费?








若文章对您有帮助,欢迎关注 程序员小迷 。助您在编程路上越走越好!

微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是 程序员小迷 (致力于C、C++、C#、Android、iOS、Java、Kotlin、Objective-C、Swift、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言