使用C99和C11时的效率问题。

时间:2012-10-15 15:35:48

标签: c performance visual-c++ c99

前几天我将用C99标准编写的程序转换为C11。基本上,动机是将代码与MSVC一起使用,但它是用Linux编写的,主要是使用默认的GCC行为编译的。在代码转换过程中,我发现在任何语句之后你都不能对函数的变量进行十进制分解,即你必须在函数的顶部声明它们。

但是我的问题是,不应该反对有效的编程规则,应该在使用变量附近声明变量,以便最大化缓存命中率?例如,在200 LOC的大功能中,我想在函数的末尾使用一些大的静态查找数组。在使用之前不会声明并初始化它会导致更多缓存命中?还是我简单地忽略了C11 C语言标准的一些基本观点?

2 个答案:

答案 0 :(得分:4)

您似乎对编译程序的标准版本感到困惑。 AFAIK,MSVC不支持任何最新的C标准。

但是要谈到你的问题的核心,这不是一个效率问题。只要程序的可观察行为没有改变,就允许编译器对语句重新排序。因此,现代编译器在首次使用之前总是会触及最新的变量。

答案 1 :(得分:2)

出现变量声明的位置对缓存行为没有影响。只是声明不会触及记忆。

然而,您可能需要将初始化分离为单独的赋值,以确保您没有初始化程序在函数开头(接近)处启用内存访问。