这是本人在做本实验时了解的前置知识,有不对或者不清晰的内容希望能在评论区提出,会认真改正和学习。
目录
^_^
在这张图中,介绍了内存的存储结构,分别是:
...
// data stored in Data Segment
int x = 100;
int main(){
// data stored on stack (Local Variable)
int a=2;
float b = 2.5;
// data stored in BSS Segment
static y;
//allocate memory on heap
int *ptr = (int*)malloc(2*sizeof(int));
// value 5 and 6 stored on heap
ptr[0]=5;
ptr[1]=6;
// deallocate memory on heap
free(ptr);
return 1;
}
在上述代码中,已经有了详细的注释每个数据存储到了哪里。但是仍有几点要说明一下。
全局数据区
^_^
由于本人操作系统学的不是很好,所以这里只能简单说一下实验可能会涉及到的知识。后续我会多了解这方面的内容放在博客上。
我们知道,物理地址(Physical Address)是unique的,基于你的物理存储器RAM。
如果一个process在使用一部分,另一个人在同一时间就不可以使用,否则会产生矛盾。
但当讨论process中的内存地址时,就会涉及到Virtual Address,虚拟地址。
每一个Process都有一个自己专属的Virtual Addrss,比如如图中V1、V2的空间大小均为0~4G,它们都可以存在这样一个地址0x5000。虚拟地址和物理地址之间存在一个映射机制,来把虚拟地址映射到物理地址中,这个过程由OS完成。
尽管他们使用了相同的虚拟地址,但是映射到了不同的物理地址。
具体的细节我会在后续学习中继续了解,并且整理到博客中。
这时就存在一个问题,如果V1中的一块虚拟地址在映射不能找到物理地址,这个就成为valid address
,如果有指令想要从这里获取数据,程序可能会crash掉,必须能映射到物理地址才能访问这一块虚拟地址。
原文:https://www.cnblogs.com/folm/p/11918420.html