本文背景:
在编程中,很多Windows或C++的内存函数不知道有什么区别,更别谈有效使用;根本的原因是,没有清楚的理解操作系统的内存管理机制,本文企图通过简单的总结描述,结合实例来阐明这个机制。
本文目的:
对Windows内存管理机制了解清楚,有效的利用C++内存函数管理和使用内存。
本文内容:
本文一共有六节,由于篇幅较多,故按节发表。其他章节请看本人博客的Windows内存管理及C++内存分配实例(一)(二)(三)(四)和(五)。
6. 内存管理机制--堆栈 (Stack) · 使用场合
操作系统为每个线程都建立一个默认堆栈,大小为1M。这个堆栈是供函数调用时使用,线程内函数里的各种静态变量都是从这个默认堆栈里分配的。 · 堆栈结构
默认1M的线程堆栈空间的结构举例如下,其中,基地址为0x0004 0000,刚开始时,CPU的堆栈指针寄存器保存的是栈顶的第一个页面地址0x0013 F000。第二页面为保护页面。这两页是已经分配物理存储器的可用页面。
随着函数的调用,系统将需要更多的页面,假设需要另外5页,则给这5页提交内存,删除原来页面的保护页面属性,最后一页赋予保护页面属性。
当分配倒数第二页0x0004 1000时,系统不再将保护属性赋予它,相反,它会产生堆栈溢出异常STATUS_STACK_OVERFLOW,如果程序没有处理它,则线程将退出。最后一页始终处于保留状态,也就是说可用堆栈数是没有1M的,之所以不用,是防止线程破坏栈底下面的内存(通过违规访问异常达到目的)。
当程序的函数里分配了临时变量时,编译器把堆栈指针递减相应的页数目,堆栈指针始终都是一个页面的整数倍。所以,当编译器发现堆栈指针位于保护页面之下时,会插入堆栈检查函数,改变堆栈指针及保护页面。这样,当程序运行时,就会分配物理内存,而不会出现访问违规。 · 使用例子
全面介绍 Windows 内存管理机制及 C++ 内存分配实例 二) (: C++内存分配实例 内存状态查询内存状态查询函数 2.1系统信息 Windows 提供 API 可以查询系统内存的一些...
介绍了windows内存管理机制及如何用C++去分配它,很有学习价值。隐藏>> 全面介绍 Windows 内存管理机制及 C++内存分配实例本文背景: 在编程中,很多 Windows 或 C++...
其他章节请看本人博客的 Windows 内存管理及 C++内存分配实例(二)(三)(四)(五)和(六)。 1. 进程地址空间 1.1 地址空间 ? 3264 位的系统 位的系统
Windows内存管理机制及C... 7页 2下载券 全面介绍Windows内存管理... 8页 ...内存分配:"<<endl; printf("指针地址=%x\n",pV); cout<<"减少物理内存 ...
全面介绍Windows内存管理机制及2_IT/计算机_专业资料。Windows内存管理机制全面介绍 Windows 内存管理机制及 C++内存分配实例(二):内存状态查询 内存分配实例( ):...
Windows内存管理机制及C++内存分配实例(二):内存状态查询_IT/计算机_专业资料。本文背景: 本文背景: 在编程中, 很多 Windows 或 C++的内存函数不知道有什么区别...
Windows内存管理机制及C++内存分配实例(四):内存映射文件_IT/计算机_专业资料。... 全面介绍Windows内存管理... 50页 1下载券 Windows-内存管理 74页 1下载券 ...
Windows内存管理机制 9页 免费 C#中的内存分配 4页 免费 C#内存释放 8页 ... PLPP-赵丽琴-07415-071415(27)-C/C++内存管理机制及应用规范 C/C++内存管理...
内存管理。 7.1 内存分配方式内存分配方式有三种: 内存分配方式有三种: (1) ... Windows内存管理机制及C... 6页 2下载券 全面介绍Windows内存管理... 50页...
其他章节请看本人博客的 Windows 内存管 理及 C++内存分配实例(一) (二) (三) (四)和(六) 。 1. 进程地址空间 2. 内存状态查询函数 3. 内存管理机制--...
热门文档