随笔分类 -  C_CPP

摘要:我们经常在编程中碰到一种情况叫符号重复定义。多个目标文件中含有相同名字全局符号的定义,那么这些目标文件链接的时候将会出现符号重复定义的错误。比如我们在目标文件A和目标文件B都定义了一个全局整形变量global,并将它们都初始化,那么链接器将A和B进行链接时会报错:[代码] 这种符号的定义可以被称为强符号(Strong Symbol)。有些符号的定义可以被称为弱符号(Weak Symbol)。对于C... 阅读全文
posted @ 2010-01-27 22:03 kernel@hcy 阅读(10952) 评论(0) 推荐(1) 编辑
摘要:无符号数和有符号数是不能进行比较运算的,否则可能会出现意想不到的错误,且极难检查出来! 首先肯几个例子(假设在32位的机器上):[代码] 结果如下:[代码] 从结果中可以看出,2 3 4都不是我们想像中的结果。在C语言中,当一个无符号数和一个有符号数进行比较运算时,有符号数会被隐含的转换成无符号数,并假设这两个数都是非负数,然后进行比较运算。当把一个有符号数转换成无符号数时,其底层的二进制表示没有... 阅读全文
posted @ 2010-01-06 10:17 kernel@hcy 阅读(3625) 评论(1) 推荐(0) 编辑
摘要:glibc2.7中的strlen函数没有使用简单的逐位测试null的方法计算字符串的长度,而是通过一个magic number,每四位一组测试一次的方法进行测试。magic number为:0x7efefeff。二进制展开后为:01111110 11111110 11111110 11111111其实就是一个第8,16,14,31位为0,其余都是1的整数。这些为0的位称为“洞(hole... 阅读全文
posted @ 2009-08-19 12:53 kernel@hcy 阅读(1608) 评论(1) 推荐(0) 编辑
摘要:1. 经典C++流:类是核心,例程多用C Runtime的,很少用模版,一般是正统教育的结果。2. 古典C流:基本上当C用,偶尔用用对象,不使用异常,喜欢怀旧。3. MFC流:秉承MFC的风格,主要使用MFC/ATL对象和Win32 API,不喜欢STL,用很多的宏把IDE的语法提示模块折磨到崩溃。4. Portable流:以C Runtime和STL为主要工具,使用类和模版,不跨平台毋宁死。5.... 阅读全文
posted @ 2009-08-14 13:34 kernel@hcy 阅读(739) 评论(1) 推荐(1) 编辑
摘要:(本文基于linux系统。) 首先说一下程序运行是的存储分配: 存储分配这张是典型的C语言的存储分配图。动态存储分配主要涉及图中的堆区。堆是无结构的连续的存储区域。当调用malloc()函数时,存储分配器从堆中找一块合适大小的连续的内存空间返回给程序。 malloc和free函数的原型如下: void * malloc(size_t size) void free(void* ptr) 这两个函数... 阅读全文
posted @ 2009-08-14 12:43 kernel@hcy 阅读(3805) 评论(1) 推荐(0) 编辑

点击右上角即可分享
微信分享提示