摘要:
Linux虚拟内存的大小为2^32(在32位的x86机器上),内核将这4G字节的空间分为两部分。最高的1G字节(从虚地址0xC0000000到0xFFFFFFFF)供内核使用,称为“内核空间”。而较低的3G字节(从虚地址0x00000000到0xBFFFFFFF),供各个进程使用,称为“用户空间”。因为每个进程可以通过系统调用进入内核,因此,Linux内核空间由系统内的所有进程共享。于是,从具体进程的角度来看,每个进程可以拥有4G字节的虚拟地址空间(也叫虚拟内存)。 每个进程有各自的私有用户空间(0~3G),这个空间对系统中的其他进程是不可见的。最高的1GB内核空间则为所有进程以及内核所共享. 阅读全文
随笔档案-2014年02月
(转)详谈高端内存和低端内存
2014-02-16 17:35 by 放作夥, 4414 阅读, 收藏,
摘要:
一、高端内存和低端内存的划分Linux物理内存空间分为DMA内存区(DMAZone)、低端内存区(NormalZone)与高端内存区(HighmemZone)三部分。DMAZone通常很小,只有几十M,低端内存区与高端内存区的划分来源于Linux内核空间大小的限制。二、来源:过去,CPU的地址总线只有32位,32的地址总线无论是从逻辑上还是从物理上都只能描述4G的地址空间(232=4Gbit),在物理上理论上最多拥有4G内存(除了IO地址空间,实际内存容量小于4G),逻辑空间也只能描述4G的线性地址空间。为了合理的利用逻辑4G空间,Linux采用了3:1的策略,即内核占用1G的线性地址空间,用 阅读全文
高级声明------定义一个函数指针数组指针
2014-02-14 21:55 by 放作夥, 396 阅读, 收藏,
摘要:
#include #include char* fun1(char* p){printf("%s\n",p);return p;}char* fun2(char* p){printf("%s\n",p);return p;}int main(){char* (*a[3])(char* p);//定义函数指针数组char* (*(*pf)[3])(char* p);//定义函数指针数组指针,其实没什么大用,只是以防变态的面试题pf=&a;a[0]=fun1;a[1]=fun2;pf[0][0]("fun1");pf[0][1]( 阅读全文
C错题集锦
2014-02-14 21:42 by 放作夥, 203 阅读, 收藏,
摘要:
1.野指针#includestructstudent{char* name;//分配结构体内存时name未初始化,极易出错int score;}stu,*pstu;int main(){pstu=(struct student*)malloc(sizeof(struct student));//隐含name野指针strcpy(stu.name,"Jimy");//野指针,出错stu.score=99;return0;}2.按值传递#include#includevoid GetMemory(char*p,int num){//实际上只是让指针副本_str指向一块堆内存,正确 阅读全文
浙公网安备 33010602011771号