LINUX.ORG.RU

Что лучше...


0

0

Еужно несколько раз обратится к v[i].something, усли я один раз созраню это в int aux будит ли какойнибудь видимый проффит?


Телепаты в отпуске

Если предположить, что v[i] есть синтаксический сахар над *(v + i), то ты сэкономишь на операции «сложение» несколько раз.

yoghurt ★★★★★
()

а профайлером слабо воспользоваться и сравнить разные варианты?

anonymous
()

если это C, возможно компилятор локальный инт будет в регистре держать, надо сгенерить ассемблерный листинг и посмотреть...

Dimson
()
Ответ на: комментарий от Andaril

поставить венду, поставить MSVS, выбрать в графическом меню параметры профилирования и также формирования ассемблерного кода и перестать парить моск себе и другим.

anonymous
()
Ответ на: комментарий от jtootf

if (w[j].something < v[i].something) ++w[j].something;
if (w[j].something > v[i].something) ++v[i].something;
return v[i].something*w[j].something;

//vs

int mem1 = ++w[j].something;
int mem2 = ++v[i].something;
if (mem1 < mem2) ++mem1;
if (mem1 > mem2) ++mem2;
return mem1*mem2;

c++

Andaril
() автор топика

>Еужно несколько раз обратится к v[i].something, усли я один раз созраню это в int aux будит ли какойнибудь видимый проффит?

Видимый - нет.

Если конечно твой v при операции [] не делает каких-то жутких и страшных вещей, например закачку 1гб файла по сети.

anonymous
()
Ответ на: комментарий от anonymous

подразумевается что это обращение к переменной в векторе и может повторится до миллиона раз.

Andaril
() автор топика
Ответ на: комментарий от Andaril

man gcc man gprof

только баловство все это. Тебе хватит man time.

И, да, мало какой компилятор осмелится заоптимизировать обращение к элементу массива, если только он не локальный.

anonymous
()

Получится как минимум не хуже, а во многих случаях лучше (бустрее и компактнее)

Led ★★★☆☆
()
Ответ на: комментарий от Andaril
   movsx	%rsi, %eax
	mov	%edx, DWORD PTR [%rsp+280+%rsi*4]
	mov	%eax, DWORD PTR [%rsp-120+%rsi*4]
	mov	%rcx, %rsi
	cmp	%edx, %eax
	jge	.L2
	add	%edx, 1
	mov	DWORD PTR [%rsp+280+%rsi*4], %edx
.L2:
	cmp	%eax, %edx
	jge	.L4
	add	%eax, 1
	mov	DWORD PTR [%rsp-120+%rcx*4], %eax
.L4:
	imul	%edx, DWORD PTR [%rsp-120+%rcx*4]
	add	%rsp, 688
	mov	%eax, %edx
	ret
	cdqe
	xor	%edx, %edx
	mov	%ecx, DWORD PTR [%rsp+280+%rax*4]
	cdqe
	mov	%eax, DWORD PTR [%rsp-120+%rax*4]
	add	%ecx, 1
	add	%eax, 1
	cmp	%ecx, %eax
	setl	%dl
	add	%ecx, %edx
	xor	%edx, %edx
	cmp	%ecx, %eax
	setg	%dl
	add	%rsp, 688
	add	%eax, %edx
	imul	%eax, %ecx
	ret
anonymous
()

Странно что сразу никто не догадался посмотреть дизасм... Как раз для того и есть чтобы смотреть насколько оптимально компильнулось что-то критичное к скорости...

I-Love-Microsoft ★★★★★
()

Сколько можно заниматься ерундой? Оставь такого рода оптимизации компилятору.

А если будут проблемы с производительностью, то найдешь с помощью профайлера узкое место и прооптимизируешь его тем или иным способом. При этом ты еще и удивишься когда увидишь где находится на самом деле узкое место.

anonymous
()
Ответ на: Телепаты в отпуске от yoghurt

> Если предположить, что v[i] есть синтаксический сахар над *(v + i), то ты сэкономишь на операции «сложение» несколько раз.

Даже такой предположение не позволяет делать выводов об экономии на операции «сложения». Си это высокоуровневый ассемблер, а потому возможности этого языка как правило непосредственно отображаются на возможности процессоров тех времен. В данном случае многие процессоры непосредственно поддерживают адресацию по базе со смещением/индексацией.

Для себя надо решить: либо ты пишешь на ассемблере задумываясь о деталях конкретной архитектуры, либо ты пишешь на ЯВУ задумываясь о данных и алгоритмах.

anonymous
()
Ответ на: комментарий от Andaril

> Time разный от случая к случаю

Ну так сгенери синтетический эксперимент - стотыщмильёнов раз прогони внутренний цикл. Пять раз прогони time, возьми наименьшее значение.

Ты что, совсем гуманитарий, что ли, физику с математикой в школе прогуливал? Почему такие банальные вещи объяснять тебе приходится?

anonymous
()
Ответ на: комментарий от anonymous

> Ты что, совсем гуманитарий

С такой орфографией, как у ТС, он вне подозрений. ;)

LamerOk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.