进程的虚拟内存缺页中断(可能段违规)
、
判断该引用是否有效是看该页面是不是通过正常手段声明要使用的,例如malloc申请,就会发生正常的缺页中断。而随意在malloc后面的内存空间进行访问,可能就会发生段违规(因为mallo的内存是一块一块的分配的,也许后面挨着的地址那块已经分配给进程了)。
数据段和堆(heap)
原来堆是属于数据段的,位于数据段的顶部,而且堆是可以动态变化大小的。
内存泄漏
程序结束的时候,其内存就会被释放的,所以一些不会长时间驻留的程序不用考虑那内存回收等问题。然而一些
生存世家较长的程序,如日历管理器,邮件工具等程序,需要我们详细斟酌动态内存的分配和回收。因为C语言没有java那样的垃圾收集器(自动确认并回收不再使用的内存块)。这些程序,在使用malloc和free的时候需要非常谨慎。堆经常会出现两种类型的问题。
释放或改写仍在使用的内存(称为“内存损坏”)
未释放不再使用的内存(称为“内存泄漏”)
如何检测内存泄漏
总线错误,段违规
另外总线错误和段错误的准确原因在不同的操作系统版本上各不相同,归根结底这两种错误都是硬件告诉操作系统一个有问题的内存引用造成的。在缺省情况下,进程在收到“总线错误”或“段错误”信号后将进行信息转储并终止。所以一般会出现core dump的提示,之所以这里是core,是因为很久以前内存的材料是铁氧化物圆环(core)。
总线错误
段错误