我有一个疑问,汇编里为什么会有data segment?为什么要把data segment和 code segment分开来?
直接把指令和数据放在一起不好吗?
维基上说:
"A 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里,那么,局部变量保存在哪里呢?(这个问题要问题在编译那部分的知识里找到答案了)。