12 2013 档案

摘要:1.虚拟内存,在32位平台下,一个进程一般拥有3g的虚拟内存地址,这些虚拟内存地址将包含,代码区,数据区,堆区,栈区等,事实上一个进程在初始化的时候,虚拟内存地址需要通过一个地址映射表才能转换为实际的物理地址,一个进程在初始化的时候操作系统不会为其分配很多的物理地址,当程序中有动态分配内存的请求时,操作系统会调整分配给进程的物理地址。2.malloc的原理:malloc是c的一个库函数,不同平台下有不同的实现,基本思想是,先看看当前进程的堆空间有没有够用的内存,有的话就返回,否则向操作系统要新的内存,此时会调用sbrk,brk,mmap等函数来实现,其中sbrk是对brk的封装也是属于c的库函 阅读全文
posted @ 2013-12-30 10:35 xpray 阅读(456) 评论(0) 推荐(0)
摘要:1 class Human{ 2 } 3 4 class Man extends Human{ 5 } 6 7 class Woman extends Human{ 8 } 9 10 public class Test {11 12 void show(Human h) {13 System.out.println("Human");14 }15 16 void show(Man m) {17 System.out.println("Man");18 }19 2... 阅读全文
posted @ 2013-12-27 14:14 xpray 阅读(4888) 评论(0) 推荐(0)
摘要:1 #include 2 #include 3 #include 4 5 int flag; 6 7 void fun(int signo) { 8 if (SIGINT == signo) { 9 printf("got SIGINT\n");10 flag++;11 }12 13 if (SIGQUIT == signo) {14 printf("got SIGQUIT\n");15 flag++;16 ... 阅读全文
posted @ 2013-12-27 10:32 xpray 阅读(730) 评论(0) 推荐(0)
摘要:在c程序中,经常会遇到段错误(segment error)和总线错误(bus error),这两种问题出现的原因可能如下段错误:对一个NULL指针解引用。访问程序进程以外的内存空间。 实际上,第一个原因可以规约到第二个原因,在一个c程序的虚拟内存空间中,从低地址到高地址一次是代码区,堆区(向上增长),栈区(向下增长),最上是常量区,其中NULL指针的位置正好是虚拟内存中地址为0的位置,而这个位置是不属于以上4个区域的,同理一些比较低的地址也不属于这四个区,所以造成段错误的原因是访问了程序虚拟内存空间4个区以外的地址,在平时的开发中,最大的可能还是对NULL进行了解引用。总线错误对一个错误的起. 阅读全文
posted @ 2013-12-25 17:57 xpray 阅读(4632) 评论(0) 推荐(0)