您的位置:首页 > 编程语言 > C语言/C++

C++——定义变量的底层实现理解

2016-04-08 19:07 309 查看
我们在定义一个变量的时候,编译器会在内存中为其分配响应的存储空间。不知你有没有注意到,比如:int a=10;a地址是:0xXXXXXXXX。在a的地址中存储的是10这个常量数字,这个地址空间被分配给变量a了。在此,我们可能会产生一个疑问变量名a是放在哪个哪里的,如果变量名a没有存储到某一个位置,那么编译器又是通过什么来锁定a的地址空间的呢?

说到这里,我们需要来说一下,其实我是个C/C++菜鸟,目前还没能够理解C/C++的核心思想。下面,我们讲解,只是对基础学习同仁传授一个合理的理解方式。

我们知道OS对每个运行的程序都会虚拟出一个虚拟地址空间来供该程序使用这个地址空间大小是4G,这里从上到下有:内核区和用户区。我们主要关注用户区的3G空间。

回到变量定义上来,我们定义的局部变量是在栈空间区域分配存储空间的,而变量名a是存放在符号表中的变量表里面。变量表里定义了:变量的名称,变量的类型,变量的所指的空间,这里有点类似于数组名相当于数组的首地址。符号表中存储变量a的名称,之后存储a的地址空间,当编译器需要调用变量a时,就会自动在符号表中扫描知道找到变量a的名称为止,然后再提取出变量a后面的地址,根据这个地址到虚拟内存空间中找到变量a的数值,进行操作

当需要删除变量a时,只需要OS只是删除符号表中的变量a这一项。(也可能是把变量a对应的地址空间的值置为某个值后再删除符号表中的变量a项。这里我们不具体讨论,到以后熟悉了C底层的实现原理,再来更正我的理解)。

附加一张图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: