内存分配
来源:互联网 发布:python学习方法 编辑:程序博客网 时间:2024/04/29 22:32
今天在看书的时候突然想到一个问题,操作系统的内存分配是从高地址进行的,还是从低地址进行的呢?故就回来进行 试验一翻了解一下,首先我们都知道内存分为栈内存区,堆内存区,静态变量区等好几个部分呢。就此我们仅仅研究栈内存和对内存的分配.
首先看一下栈内存的分配:
运行结果:
由此我们看出操作系统的栈内存是由高地址开始分配的。即首相分配高地址的空闲内存块。至此我们再做一个进一步的测试,看一下当我们使用的栈内存溢出的话会出现什么情况:
输出结果:
从结果可以看出我们开始利用栈内存的特性用一个指针从a开始遍历到c修改了a,b,c的值。从中我们可以联想出内存中a,b,c的存放情形,可以说是一个倒置的栈。a处于最上方,b在中间,c在最下面。而后我们用一个指向c的指针开始依次增加并为之赋值。从表面上看我们的操作已经形成了越界行为,但是出奇的是并没有出现错误,并且还修改了a,b的值。结论同样可以从栈内存分配的特性得出。
我们再看一下动态内存分配:
运行结果:
从中我们可以看出,堆内存的分配同样也是由高地址开始分配的。但是与栈内存不同的是它已不再连续。此时我们无法再用通过指针连续相加的方式对其进行测试。了解一下即可。
- 内存分配
- 内存分配
- 内存分配
- 内存分配
- 内存分配
- 内存分配
- 内存分配
- 内存分配
- 内存分配
- 内存分配
- 内存分配
- 内存分配
- 内存分配
- 内存分配
- 内存分配
- 内存分配
- 内存分配
- 内存分配
- 我开通CSDN
- Flex 组件全屏 部分全屏的实现
- MIPS 分支延迟与加载延迟
- 北京山峰词典[北京山友必读]
- Windows核心编程:内核对象
- 内存分配
- OSPF路由协议简介
- 一定要看啊
- cisco 基本配置
- 龙芯2E 处理器微体系结构概述
- 在交互性要求强的场合,SilverLight使用Ajax是愚蠢选择
- Asp.net中DataBinder.Eval 用法
- 一位25岁的CEO给大学生的忠告
- 再谈用VB无窗口透明Usercontrol编写透明浮动按钮