摘要: 1:定义: 它们看起来象函数,运作起来象函数,比宏(macro)要好得多,使用时还不需要承担函数调用的开销。当内联一个函数时,编译器可以对函数体执行特定环境下的优化工作。这样的优化对"正常"的函数调用是不可能的。2:规则: inline关键字必须和函数体定义放在一起才可以实现内联,仅仅将inline放在函数声明之前不起任何作用。inline是一个用于实现的关键字而不是一个用于声明的关键字。对于类方法,定义在类体内部的方法自动成为内联方法。3:实现思想: 内联函数的基本思想在于将每个函数调用以它的代码体来替换,很可能会增加整个目标代码的体积过分地使用内联所产生的程序会因为有太 阅读全文
posted @ 2011-03-24 20:06 zsounder 阅读(2533) 评论(0) 推荐(3) 编辑
摘要: 1:内存对齐定义: 现在使用的计算机中内存空间都是按照字节划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但是实际上计算机系统对于基本数据类型在内存中的存放位置都有限制,要求这些数据存储首地址是某个数K的倍数,这样各种基本数据类型在内存冲就是按照一定的规则排列的,而不是一个紧挨着一个排放,这就是内存对齐。对齐模数: 内存对齐中指定的对齐数值K成为对齐模数(Alignment Modulus)。当一种类型S的对齐模数与另一种类型T的对齐模数的比值是大于1的整数,我们就称类型S的对齐要求比T强(严格),而称T比S弱(宽松)。2:内存对齐的好处: 内存对齐作为一种强制的要求,第... 阅读全文
posted @ 2011-03-24 14:54 zsounder 阅读(3454) 评论(2) 推荐(3) 编辑
摘要: printf的声明 int _cdecl printf(const char* format, …);调用约定:_cdecl_cdecl调用约定的特点: 1). 参数从右向左依次入栈 2). 调用者负责清理堆栈 3). 参数的数量类型不会导致编译阶段的错误对x86, 栈的生长方向向下(高地址向低地址),_cdecl调用约定函数参数从右向左入栈,因此从第一个固定参数(format)的堆栈地址向前(向上,向高地址)移动就可得到其他变参的地址。1: va_list、va_start、va_arg、va_end对可变参数的支持 va_list、va_start、va_arg、va_end相关宏... 阅读全文
posted @ 2011-03-24 14:00 zsounder 阅读(1078) 评论(0) 推荐(0) 编辑
摘要: 字符编码的问题让我困惑了好久的一段时间,其实简单的想,字符编码没有什么东西的,可是想真弄明白还是花去了我一点时间,前端时间写了一个简单的log程序,主要的工作就是支持系统运行时输出日志信息,同时允许定制不同级别的日志输出,刚开始的时候只是写入到文件中,可用过之后发现,只是写入到文件中,在进行系统调试的时候不是很方便,还要打开文件,浏览,再返回源代码,如果能够有一个界面展示岂不是更好,列表显示日志,可以选择显示的日志级别,实现日志输出位置的定位,类似下图中展示的一样:感觉还是能方便一点的,而显示窗口的实现可以通过exe或者dll的方式,这就需要进行两个独立进程之间的通信,为了支持多个日志显示窗. 阅读全文
posted @ 2010-05-08 20:48 zsounder 阅读(3944) 评论(1) 推荐(4) 编辑