为什么会有data segment?

来源:互联网 发布:网络电影潘安传奇剧照 编辑:程序博客网 时间:2024/04/29 09:34

我有一个疑问,汇编里为什么会有data segment?为什么要把data segment和 code segment分开来?

直接把指令和数据放在一起不好吗?


维基上说:

"data segment is a portion of virtual address space of a program, which contains the global variables and static variables that are initialized by the programmer."

就是说,data segment 是用来存全局变量和静态变量的内存区域。

问题:如果这些全局变量放在了code segment里,那会怎么样?


我猜测:存放了全局变量和静态变量的data segment ,有点像程序之间的共享区域,不同的函数/指令段间的代码互相独立(这里的独立是指从逻辑上来说的,在物里内存里,它们当都是连在一起、难以分辨的二进制数),分成一个模块和另一个模块,但共同享有这些程序变量,像一个通信机制。

data segment 就一个函数/指令段之间相互通信的protocol !

例如我们定义了一个全局变量 int a; 假设有一个函数fa() 对a 的值作出改变,此后,如果另一个函数fb() 读到a时, 就会发现a 与原来的值不一样了,这样就会影响 fb()的行为。所以这是 相互独立的 fa() 和 fb() 两者间通过改变 共享的全局变量 a 来互相影响对方的行为。


下一个问题:

全局变量放在了code segment里,那么,局部变量保存在哪里呢?(这个问题要问题在编译那部分的知识里找到答案了)。

原创粉丝点击