buffer [index]和* buffer的周期是否相同?

时间:2012-09-19 11:57:30

标签: c++ performance optimization low-level

char buffer[424242] = {0};

buffer[index]*buffer一样快吗?

for (int i = 0; i < SIZE; ++i) {
  buffer[i] = 42;
}

char* end = buffer + SIZE;
for (char* pos = buffer; pos != end; ++pos) {
  *pos = 42;
}

我想我的问题是,是否有任何汇编指令可以在内存中设置一个位置加上并在一个周期内偏移到给定值?

LEA似乎加载地址加上以这种方式加倍。

2 个答案:

答案 0 :(得分:1)

*buffer至少与buffer[index]一样快。取决于index。如果index == 0,它们会同样快。

根据你的编辑:

char& end = buffer + SIZE;
for (char* pos; pos != end; ++pos) {
  *pos = 42;
}

调用未定义的行为,因为您没有初始化pos

根据您的第二次修改:

首先编写代码以便于阅读,简介&amp;只有在你得到一些具体结果后才可能改变。

for (int i = 0; i < SIZE; ++i) {
  buffer[i] = 42;
}

更具可读性,坚持下去。

答案 1 :(得分:1)

不确定这是您期望的答案,但您是否还有任何性能问题需要解决?

您的问题代码列表包含“优化”:如果代码中唯一可用的优化是在撰写*bufferbuffer[]之间进行选择,我会非常惊讶。

如果您确实遇到了性能问题,则应首先对代码进行分析,以找出瓶颈所在。