内存分配

来源:互联网 发布:python学习方法 编辑:程序博客网 时间:2024/04/29 22:32

               今天在看书的时候突然想到一个问题,操作系统的内存分配是从高地址进行的,还是从低地址进行的呢?故就回来进行 试验一翻了解一下,首先我们都知道内存分为栈内存区,堆内存区,静态变量区等好几个部分呢。就此我们仅仅研究栈内存和对内存的分配.

首先看一下栈内存的分配:

运行结果:

 

由此我们看出操作系统的栈内存是由高地址开始分配的。即首相分配高地址的空闲内存块。至此我们再做一个进一步的测试,看一下当我们使用的栈内存溢出的话会出现什么情况:

输出结果:

 

从结果可以看出我们开始利用栈内存的特性用一个指针从a开始遍历到c修改了a,b,c的值。从中我们可以联想出内存中a,b,c的存放情形,可以说是一个倒置的栈。a处于最上方,b在中间,c在最下面。而后我们用一个指向c的指针开始依次增加并为之赋值。从表面上看我们的操作已经形成了越界行为,但是出奇的是并没有出现错误,并且还修改了a,b的值。结论同样可以从栈内存分配的特性得出。

我们再看一下动态内存分配:

运行结果:

 

从中我们可以看出,堆内存的分配同样也是由高地址开始分配的。但是与栈内存不同的是它已不再连续。此时我们无法再用通过指针连续相加的方式对其进行测试。了解一下即可。