Web Analytics

也谈’SIGBUS和SIGSEGV’

SIGBUS和SIGSEGV也许是我们在平时遇到的次数最多的两个内存错误信号。内存问题一直是最令我们头疼的事情,弄清楚两个信号的发生缘由对我们很好的理解程序的运行是大有裨益的。 我们来看两段程序: //testsigsegv.c int main() { char *pc = (char*)0×00001111; *pc = 17; } ...

December 19, 2007 · 3 min · Tony Bai

从本源看世界-读'Write Great Code'

以前曾经说过自己并非计算机科班出身。想想自己在大学时的学习过程未免有些底气不足,记得当时一直坚持去旁听计算机专业的课,但是鉴于本专业老师的点名和课堂作业,自己未免耽误了很多节课,弄得自己学的很不系统,效果不是很好。工作后一直从事应用级的开发,对计算机方面基础的本源性的知识也逐渐陌生起来。但我是那种知其然也要知其所以然的人,这两年也不间断的买了不少讲解计算机底层知识的书,目的是让那些计算机本源性的东西在我脑袋里逐渐清晰了起来。这不又一本好书问世了-‘Write Great Code’第一卷,我很早就已经下载了其英文版,只是没来得急看,这两天看了其中几章,发现很适合我的口味。 ...

December 22, 2006 · 4 min · Tony Bai

三谈内存对齐-背后的故事

记得以前曾经两次谈到过内存对齐话题,一次在’也谈内存对齐‘一文中,另一次则是’也谈内存对齐(续)’,今天下午和同事又谈到内存对齐的问题了,遂想继续挖掘下去,看看其背后的故事。 关于内存对齐的中文文章多在介绍对齐的’法则’,比如为什么sizeof(T)和我们估计的T的大小有出入呢等等,而对于内存对齐的本质少有介绍,我在Google上搜索了一阵后,在IBM开发社区上发现一篇叫’Data alignment: Straighten up and fly right‘的文章,其中就有我想知道的关于’内存对齐背后的故事’,下面的很多内容都是来自那篇文章的。 ...

December 8, 2006 · 4 min · Tony Bai

也谈内存对齐(续)

关于内存对齐的话题,始终是敏感的。稍有不慎,必将闯下大祸!最近项目稍显轻闲,自己给自己安排一天反思和总结一下,突然想到以前写过的一篇’也谈内存对齐’,那篇文章谈的是内存对齐的基本知识以及一些实验的数据,想必很多人看完后,会收获一些东西,但是对内存对齐的应用还是处于懵懂状态,其实大部分时间我们是不会显式的用到’内存对齐的’,但是有些时候我们需要这样做。这里做了一个小例子,希望能给大家以启发。 ...

June 14, 2006 · 5 min · Tony Bai

再说内存

离我的上一篇BLOG已经时隔一个月有余,项目忙是一方面原因,最主要的还是自己没什么“收获”。在最近的项目中总是和内存打交道,时间长了,便有了些许问题,原本我就不是不求甚解者,遂趁此机会又复习了些内存相关资料。 ...

November 2, 2005 · 5 min · Tony Bai

也谈内存对齐

在最近的项目中,我们涉及到了“内存对齐”技术。对于大部分程序员来说,“内存对齐”对他们来说都应该是“透明的”。“内存对齐”应该是编译器的“管辖范围”。编译器为程序中的每个“数据单元”安排在适当的位置上。但是C语言的一个特点就是太灵活,太强大,它允许你干预“内存对齐”。如果你想了解更加底层的秘密,“内存对齐”对你就不应该再透明了。 一、内存对齐的原因 大部分的参考资料都是如是说的: 1、平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。 2、性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。 ...

August 9, 2005 · 6 min · Tony Bai