c - 在 C 中初始化数组 - 执行时间

标签 c arrays performance

int a[5] = {0}; 

对比

typedef struct 
{ 
 int a[5]; 
} ArrStruct; 
ArrStruct arrStruct; 
sizeA = sizeof(arrStruct.a)/sizeof(int);
for (it = 0 ; it < sizeA ; ++it) 
    arrStruct.a[it] = 0; 

用 for 循环初始化是否需要更多的执行时间?如果是,为什么?

最佳答案

这取决于编译器和优化标志。

在最近的 GCC(例如 4.8 或 4.9)上,带有 gcc -O3(或者甚至可能是 -O1-O2),它不应该很重要,因为会发出相同的代码(GCC 甚至进行了优化,将您的循环转换为 builtin_memset,这将进一步优化)。

在某些编译器上,int a[5] = {0}; 可能会更快,因为编译器可能会发出例如 vector 指令(或在 x86 上为 rep stosw)清除数组。

最好的办法是检查生成的(gimple 表示和)汇编代码(例如使用 gcc -fdump-tree-gimple -O3 -fverbose-asm -mtune=native -S)并基准。大多数情况下这无关紧要。请务必在编译时启用优化。

一般不关心这种微优化;一个好的优化编译器比您有时间编写代码更好。

关于c - 在 C 中初始化数组 - 执行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23412845/

相关文章:

android - 如何使用单独的字符串数组设置多行 ListView (Android)

java - -XX :+UseNUMA affects JVM performance for systems with only one node?如何

c# - 使用 LINQ 加速查询

c - 多线程和多进程时 fprintf 的行为如何?

c - sprintf 没有内存分配

Python:如何将数据库的输入拆分为二维数组

c++ - 打开文件时出现问题并且可能将文件输入/输出到字符串

sql - 使用函数的 SQL Server 查询速度非常慢

c - 在初始化数组时使用#define 并作为 C 中函数的参数时出现语法错误?

C代码中的CGRect