- 博客(4)
- 收藏
- 关注
转载 二级指针做参数
程序1: void myMalloc(char *s) //我想在函数中分配内存,再返回 { s=(char *) malloc(100); } void main() { char *p=NULL; myMalloc(p); //这里的p实际还是NULL,p的值没有改变,为什么? if(p) free(p); } 程序2:void
2011-06-09 00:11:00 2243
原创 linux内核对内存的管理和使用
首先当程序需要一块不存在的内存时(也即页表项中已经标记出相应的页面不在内存中),CPU通过80386的页错误异常中断来实现。当一个进程引用一个不存在的内存页面时就会产生一个页错误中断,并把引起中断的线性地址保存在CR2寄存器中(便于高效快速访问),因此处理该中断的程序就可以知道页异常的确切地址,从而可以把进程要求的页面从二级存储空间(比如硬盘)加载到内存中。如果此时物理内存已经被占用,则可以借助二
2011-06-08 17:45:00 664
原创 C语言的几个问题
1.函数调用压入堆栈的情况:void add(int a,int b, int c){ int i,j;}在函数调用时将其参数和返回地址压入堆栈,堆栈中存储的函数调用信息成为调用结构,为了让函数找到调用结构,提供了基指针寄存器(BP)将其赋给结构的起始地址同时将局部变量压入堆栈。函数参数的压入堆栈的顺序是从右向左,局部变量的压入顺序是声明的顺序。 2.
2011-06-08 10:05:00 224
原创 0.11linux内存管理
linux内存管理程序主要有两个功能:1.实现分段和分页机制。 2.内存的寻址保护机制。通过分段虚拟地址转换为线性地址,通过分页线性地址转换为物理地址。一个系统可以有多个页目录表,但某一时刻只有一个页目录表可用,当前页目录表是有在CPU的CR3确定的,它存储着当前页目录表对应的物理地址。(0.11内核只用到了一个页目录表)。一个页目录表占用一个页面,并用4个字节寻址一个页目录项,这样一个页目录表可以寻址1024个页目录项。页目录项同理可以寻址1024个页面。这样一个页目录表可以寻址1024*1024*409
2011-06-01 12:34:00 599
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人