【发布时间】:2011-12-16 17:50:13
【问题描述】:
我试图在 C 中初始化一个数组,并且对于每个元素,GCC 正在生成一个 mov 指令(如果要初始化很多元素,这是一种低效的方法)。我将如何使用数组数据加载内存并从中返回指针而不是以这种方式初始化?
6:array.c **** int a[]={1,2,3,4,5,9};
26 .loc 1 6 0
27 0008 C745E001 movl $1, -32(%rbp)
27 000000
28 000f C745E402 movl $2, -28(%rbp)
28 000000
29 0016 C745E803 movl $3, -24(%rbp)
29 000000
30 001d C745EC04 movl $4, -20(%rbp)
30 000000
31 0024 C745F005 movl $5, -16(%rbp)
31 000000
32 002b C745F409 movl $9, -12(%rbp)
32 000000
【问题讨论】:
-
优化编译。
-
当然,我对汇编不太熟悉,但假设它必须在运行时初始化,那么最佳方法是什么?
-
@Bwmat。那将被复制数组。您在函数中初始化空数组并将内容从外部数组复制到它。最快在运行时初始化数组。
-
@fazo:你确定这样更快吗?我不知道低级的东西,但否则我会猜到。 move 在代码中需要更多指令,但不需要从其他内存读取,也不需要循环。
-
@alertjean,我认为只需声明您的数组
const就足够了。 gcc 非常适合优化不必要的存储。另一方面,如果您希望该数组可修改,则必须在某个时候存储该值。
标签: c arrays pointers gcc initialization