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

标签 c performance visual-c++ c99

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

但我的问题是,变量应该在接近使用时声明以最大化缓存命中率,这不是违反高效编程规则吗?例如,在一个 200 LOC 的大函数中,我想在函数快结束时使用一些大的静态查找数组。不会在使用之前声明和初始化它导致更多缓存命中吗?还是我只是遗漏了 C11 C 语言标准的一些基本要点?

最佳答案

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

但要谈到您问题的核心,不,这不是效率问题。只要程序的可观察行为没有改变,编译器就可以根据自己的喜好对语句重新排序。因此,现代编译器总是会在新变量首次使用之前尽可能地触及它。

关于c - 使用 C99 和 C11 时的效率问题。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12899048/

相关文章:

c++ - 如何在 C++ 中访问新主函数的参数?

c++ - 如何在 64 位 C++ 代码中使用暂停汇编指令?

visual-c++ - 删除 cmake 上的默认标志

java - OpenCV(JavaCV)与 OpenCV(C/C++ 接口(interface))

android - 如果我们使用多个 APK,BuildConfig.VERSION_CODE 不会改变吗

java - Windows 上的 Tomcat - 免费的分析和指标收集工具?

performance - 提高 RadGrid 客户端性能

c++ - 如何使用C读取NTFS文件系统的图元文件

c - 使用信号量的程序在 Linux 上运行良好...在 Mac osX 上出现意外结果

c - 为什么 realloc 不缩小数组?