为什么会有data segment?

我有一个疑问,汇编里为什么会有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里,那么,局部变量保存在哪里呢?(这个问题要问题在编译那部分的知识里找到答案了)。

发布了164 篇原创文章 · 获赞 13 · 访问量 34万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览