编译器
文章平均质量分 63
yuwen_dai
这个作者很懒,什么都没留下…
展开
-
strict align 的含义
在有些处理器上,如果在非对齐地址上存取一个一个值,可能会出“对齐异常”。 比如,4字节的int型一般都要在能被4整除的地址上存取;2字节的short型在偶数地址上被存取。 gcc有编译选项可以让用户指明代码将要运行的主机是严格对齐的、还是支持非对齐操作。 这个选项就是 -mstrict-align 或 -mono-strict-align。这是测试代码:struct tt{原创 2013-01-01 14:54:43 · 3678 阅读 · 0 评论 -
测试编译器性能的源码
这个网站上有许多算法, 都挺耗时的,可以用来测试编译器或计算机的性能:http://benchmarksgame.alioth.debian.org/index.php另外,gcc 有选项 -time 可以报告子进程用了多长时间编译文件。原创 2012-12-20 15:29:12 · 1135 阅读 · 0 评论 -
如何找出重名的全局变量
如果代码很复杂,可能会出现不同模块使用名字相同的全局变量, 如何发现这样的重复定义? ld 有 --warn-common 可用。 如果用gcc做连接, 用 -wl,--warn-common。 这是例子。 a1.c:#include #include int g_this_symbol;void foo(void);intmain (int argc, char原创 2012-12-20 15:54:13 · 2281 阅读 · 0 评论 -
strict alias 的含义
Alias 的定义一个指针叫做另一个指针的 alias (别名)如果这两个指针都指向相同的地址或对象。在C99标准里,建立一个与原类型不同的别名是非法的。这叫做 strict aliasing规则。这条规则在GCC的-O2级别以会自动使能。strict alias 的好处便于更进一步的优化。 这是一个例子:typedef struct { uint1原创 2013-01-13 10:47:34 · 1498 阅读 · 0 评论 -
使用 icecream 进行分布式编译
icecream 也是一个分布式编译工具, 我感觉设置起来比distcc方便。 这是详细步骤。 下载并编译icecream下载地址是 ftp://ftp.suse.com/pub/projects/icecream/下载并解压到一个临时目录,运行./configure --prefix=/opt/icecreammakesu - rootmake ins原创 2013-12-09 15:20:24 · 6294 阅读 · 0 评论 -
被遗忘的C结构体打包技术
原文见 http://www.catb.org/esr/structure-packing/ 。 作者是著名hacker。 虽然讲的是C语言中一个很基本的概念,但条理清楚,读后仍能获得不少启发。 特别是文中提到的结构体的跨步地址(stride address),我以前没有注意到!1. 谁该阅读本文本文是关于如何减少C程序的内存占用的:手工重新排列C结构体的成员声明来减小尺寸。为了读翻译 2014-01-06 14:23:06 · 14345 阅读 · 3 评论