>> >>А как сделать идейно правильно? > >Идейно правильно - не рассчитывать на размерность вообще. > >Непонятно также, что вы особо выигрываете, передавая в функцию данные, а не >указатель на них. Если эти данные ложатся в стек, то процессору >все равно за ними лезть в память, по адресу в стеке. >Если передаются через регистры - то все равно они туда попадают >из памяти же, при вызове. Спасибо за ответ. Выигрышей несколько: 1) если данные надо портить, то их придется в функции явно копировать из указателя, 2) часто (особенно на 64 битах) можно выполнить 2 операции одной командой над структурой. Ну, к примеру, сдвигать два индекса массива одновременно простым суммированием, или инициализировать/сравнивать одним равенством/условием. Вероятно компилятор это оптимизирует как-то и без меня, но мне так спокойнее за критические куски кода :), 3) функция может возвращать 2 аргумента вместо одного напрямую, а не через аргумент-указатель, да и вообще количество аргументов уменьшаеться. Короче, выгоду можно подытожить как: мелочь, а приятно. :)
|