-1
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 似乎以这种方式加载地址并将其相乘。

4

2 回答 2

1

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

您的问题标签列表包含“优化”:如果您的代码中唯一可用的优化是在编写*bufferbuffer[].

如果你真的有性能问题,你应该首先分析你的代码来找出瓶颈是什么。

于 2012-09-19T12:19:03.910 回答
1

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

根据您的编辑:

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

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

根据您的第二次编辑:

首先编写代码以提高可读性,配置文件并可能仅在获得一些具体结果后更改。

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

更具可读性,坚持下去。

于 2012-09-19T11:58:53.873 回答