为什么会有data segment?
来源:互联网 发布:网络电影潘安传奇剧照 编辑:程序博客网 时间:2024/04/29 09:34
我有一个疑问,汇编里为什么会有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里,那么,局部变量保存在哪里呢?(这个问题要问题在编译那部分的知识里找到答案了)。
- 为什么会有data segment?
- 为什么会有serialVersionUID
- 为什么会有“剩男剩女”
- 为什么会有句柄
- 为什么会有hibernate
- 为什么会有servlet?
- 为什么会有异常
- 为什么会有JavaScript???
- 为什么会有java,为什么会有.net
- 为什么会有Java,为什么会有.NET
- 06 为什么会有继承?为什么会有super?
- 为什么会有这个blog
- 为什么会有类型转换?
- 为什么物体会有颜色
- 为什么会有Presentation Error
- java为什么会有serialVersionUID
- 为什么会有字符串函数?
- 为什么会有NodeJS之一
- Java IO
- 堆排序
- 26条时间管理技巧
- SqlServer2008学习笔记 部分函数功能
- 调试UCGUI时, error: #134: expected a field name
- 为什么会有data segment?
- linux常用命令——yum
- sqlserver无法启动
- 对两个整数变量的值进行互换(不需要第三方变量)
- iphone 开发初学
- 程序人生--2008年(42)
- 呵呵
- JQuery动态创建表单:ie下select无法下拉(firefox正常)
- 移动支付模式再添新军:指纹支付