
C
wwlhz
这个作者很懒,什么都没留下…
展开
-
Linux下编写支持多线程的库
在一个进程中,所有线程共享同一个地址空间。所以,如果一个变量是全局的和静态的,那么所有线程访问的是同一份。一个可执行程序,由下面5部分组成:代码段: 由程序的所有代码编译而成的二进制组成,一个进程只有一个副本,只读。初始化数据段: 包含所有赋了初值的全局变量组成。非初始化数据段:没有被赋初值的全局变量组成。栈空间堆空间只有堆栈是每个线程独立地,其他三项都是共享的。多个原创 2016-10-13 18:14:27 · 1395 阅读 · 0 评论 -
字节对齐问题总结
字节对齐问题总结为什么要字节对齐便于CPU快速访问,减少CPU访存的次数。对于不同硬件平台下代码的移植尤为重要。 字节对齐的目标是:让变量的起始地址符合某种“特性”。比如在32位系统中int变量占4个字节,分配内存时,其起始地址应该位于4字节的边界上,即起始地址能够被4整除。如何做到字节对齐 编译器默认会自动为变量对齐,在x86平台上,gcc默认会4字节对齐变量,如果要定义自己的对齐方式,可原创 2017-02-09 10:29:03 · 742 阅读 · 0 评论 -
内存碎片/内存空洞
内存碎片/内存空洞内存碎片: 程序长时间运行后,由于不停的malloc/free操作,尽管不存在内存泄露,但程序所占用的内存空间越来越大,有时候还会导致malloc申请失败,这就是由于内存碎片所导致。产生原因: 非mmap申请的内存,其释放,只能从堆顶开始。中间部分的内存即使通过free释放掉,但仍然是被当前程序所占用,并未彻底释放到原创 2017-06-08 15:25:41 · 2862 阅读 · 0 评论 -
CentOS 6.5 安装gmime 2.6.20 (二)
升级Glib后,带来了很多问题,GLib本身会包括:libglib-2.0.so、libgio-2.0.so、libgobject-2.0.so、libgthread-2.0.so。需要把旧版本的这些库文件删除掉,或者确保程序链接时用的是最新版本的库文件。在gdb调试时,发现还需要升级gdb。“FrameDecorator is new in gdb 7.7, so we ad原创 2016-10-23 21:55:19 · 954 阅读 · 0 评论 -
CentOS 6.5 安装gmime 2.6.20 (一)
gmime-2.6.20 configure中写的依赖GLIB - version >= 2.18.0,系统默认的Glib版本是2.28.8。实际编译过程中,会报错:../gmime/.libs/libgmime-2.6.so: undefined reference to `g_mutex_init'../gmime/.libs/libgmime-2.6.so: undefined原创 2016-10-21 14:10:01 · 2479 阅读 · 0 评论 -
Linux下 wchar_t 与char 转换
为了支持多语言,需要支持宽字符,Linux下用wchar_t表示,wchar_t最大长度4个字节,已经可以囊括世界上所有的语言编码,中文字符在gb2312编码下用2个字节表示,但用utf-8编码需要3个字节表示。Linux下的系统调用,大部分都已经有对应的宽字符版本。具体可参照对照表但仍有一些系统调用是没有宽字符版本的,例如fopen系列函数: FILE *fopen(const ...原创 2017-07-07 19:37:49 · 8493 阅读 · 0 评论