Я новичок в C - привык к языкам сценариев, таким как, PHP, JS, Ruby и т. Д. Получил запрос относительно производительности. Я знаю, что нельзя оптимизировать микрооптимизацию слишком рано - однако я пишу расширение Ruby C для Google SketchUp, где я делаю много трехмерных вычислений, поэтому производительность является проблемой. (И этот вопрос также для изучения того, как работает C).
Часто выполняется много итераций для обработки всех 3D-данных, поэтому я пытаюсь выяснить, что может быть быстрее.
Мне интересно, если доступ к записи массива во много раз быстрее, если я сделаю ссылку на указатель на эту запись массива? Какой будет обычная практика?
struct FooBar arr[10];
int i;
for ( i = 0; i < 10; i++ ) {
arr[i].foo = 10;
arr[i].bar = 20;
arr[i].biz = 30;
arr[i].baz = 40;
}
Это будет быстрее или медленнее? Почему?
struct FooBar arr[10], *item;
int i;
for ( i = 0; i < 10; i++ ) {
item = &arr[i];
item->foo = 10;
item->bar = 20;
item->biz = 30;
item->baz = 40;
}
Я огляделся и нашел обсуждение переменных по сравнению с указателями - где обычно говорили, что указатели требуют дополнительных шагов, так как нужно было найти адрес, затем значение - но в общем случае не было никакого попадания.
Но что мне было интересно, если доступ к записи массива в C сильно снижает производительность? В Ruby сделать ссылку на запись быстрее, если вам нужно много раз обращаться к ней, но это Ruby ...