文章分类 -  内存地址,机制

摘要:内存管理是操作系统的核心;它对于程序员和系统管理员都很关键。在接下来的几篇文章里面我将对内存的关键技术做谈论,但是不会远离其本质。然而概念很普通,例子多半来自32位X86系统的LINUX和Window操作系统。这第一篇文章谈论程序在内存中如何存放。 在多任务操作系统中的每一个进程运行在他自己的内存地址空间中。这个地址空间就是虚拟地址空间,虚拟地址空间在32位模式下总是4GB大小的内存地址。这些虚拟地址用页表方式映射物理内存,页表由操作系统内核维护,由处理器访问。每个进程有自己的页表集合,但这里有个难以理解的地方。一旦虚拟地址(作者的意思也就是分页机制)开启,它应用与所有正在运行与机器上的软.. 阅读全文
posted @ 2012-09-19 21:03 hktkhhhh 阅读(239) 评论(0) 推荐(0)
摘要:问题: 我们在写程序的时候经常发现程序使用的内存往往比我们申请的多,为了优化程序的内存占用,搅尽脑汁想要优化内存占用,可是发现自己的代码也无从优化了,怎么办?现在我们把我们的焦点放到malloc上,毕竟我们向系统申请的内存都是通过它完成了,不了解他,也就不能彻底的优化内存占用。来个小例子//g++ -o malloc_addr_vec mallc_addr_vec.cpp 编译2 #include<iostream>3 using namespace std;4 int main(int argc, char *argv[])5 {6 int malloc_size = atoi( 阅读全文
posted @ 2012-06-01 15:24 hktkhhhh 阅读(173) 评论(0) 推荐(0)
摘要:先确认一下这里“低地址高地址”的定义,这里并不是指的大端小端中的地址高低,而是内存中的地址,如下:00421ae0为相对低地址,00421ae8为相对高地址.这个我的测试代码:#include "iostream"using namespace std;int global1;int global2;struct Node{int m;};int main(){int stack1;int stack2;Node *heap1=new Node();Node *heap2=new Node();cout<<"global address:"& 阅读全文
posted @ 2012-05-26 12:06 hktkhhhh 阅读(536) 评论(0) 推荐(0)
摘要:[转] 堆栈详解(数据与内存中的存储方式)2011-09-09 11:27转载自 shaoguobao最终编辑 shaoguobaochar* r = "hello word!";char b[]="hello word!"*r = 'w';*b='w';其实应该是语法错误,可是VC++6.0没有警告或者错误,r指向的是文字常量区,此区域是编译的时候确定的,并且程序结束的时候自动释放的, *r = 'w';企图修改文字常量区引起错误,b的区别在于其空间是在栈上分配的,因此没有错误。const char* r 阅读全文
posted @ 2012-05-26 11:36 hktkhhhh 阅读(206) 评论(0) 推荐(0)
摘要:二、什么是字节序字节序,顾名思义字节的顺序,再多说两句就是大于一个字节类型的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序的问题了)。其实大部分人在实际的开发中都很少会直接和字节序打交道。唯有在跨平台以及网络程序中字节序才是一个应该被考虑的问题。在所有的介绍字节序的文章中都会提到字节序分为两类:Big-Endian和Little-Endian,引用标准的Big-Endian和Little-Endian的定义如下:a) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。b) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的 阅读全文
posted @ 2012-05-26 10:49 hktkhhhh 阅读(306) 评论(0) 推荐(0)
摘要:内存地址对齐 分类: 代码优化 2009-12-01 00:34 777人阅读 评论(2) 收藏 举报 内存地址对齐,是一种在计算机内存中排列数据、访问数据的一种方式,包含了两种相互独立又相互关联的部分:基本数据对齐和结构体数据对齐。当今的计算机在计算机内存中读写数据时都是按字(word)大小块来进行操作的(在32位系统中,数据总线宽度为32,每次能读取4字节,地址总线宽度为32,因此最大的寻址空间为2^32=4GB,但是最低2位A[0],A[1]是不用于寻址,A[2-31]才能存储器相连,因此只能访问4的倍数地址空间,但是总的寻址空间还是2^30*字长=4GB,因此在内存中所有存放的基本类. 阅读全文
posted @ 2012-05-25 18:43 hktkhhhh 阅读(175) 评论(0) 推荐(0)
摘要:内存对齐 分类: c++ windows核心编程 2012-05-09 16:44 20人阅读 评论(0) 收藏 举报一、什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问 一个没有进行对齐的变量的时候会发生错误,那么 阅读全文
posted @ 2012-05-25 15:06 hktkhhhh 阅读(150) 评论(0) 推荐(0)