|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июн 23, 2004 01:01:17 Если константа, то и так понятно А если степень 2, то функцию можно вызывать рекурсивно, а для определения outputSize использовать сдвиги (сам outputSize хранить в регистре) |
|
|
Дата: Июн 23, 2004 01:02:16 Или вообще хранить не outputSize, а log2(outputSize) |
|
|
Дата: Июн 23, 2004 01:07:44 М-хм... Но цикл-то ведь будет повторяться столько же раз, сколько повторялись прежние два. Да, можно использовать оптимизацию, например, еще вынести i/outputSize и outputSize*2 за тело вычислений, но много ли это даст? |
|
|
Дата: Июн 23, 2004 01:22:19 А как иначе заполнить массив Array[n] меньше, чем за n проходов? Можно, конечно, за один проход заполнять несколько элементов массива, но много ли это даст? Тем более что самым узким местом наверняка будет доступ к памяти, а не вычисление. Ведь чтобы разложить такой пирамидкой массив 1024x1024 DWORD'ов нужно (1024*1024+512*512+256*256+128*128+64*64+32*32+16*16+8*8+4*4+2*2+1*1)* (SIZEOF(DWORD)) = 1398101*4 = 5592404 ~ 5,33 MB Да и сколько раз в секунду придётся раскладывать массив? Единственное, что можно сделать — переделать массив в виде struct Large_Array{ Medium_Array Childs[4]; } struct Medium_Array{ Small_Array Childs[4]; } ... Но тогда чтобы использовать эти массивы с любыми API придётся их перегруппировывать |
|
|
Дата: Июн 23, 2004 17:44:04 Массив можно сделать и BYTE. Тогда все будет проще. Ведь так??? Что можно сделать если изначально дана ссылка на массив 1024 x 768 х 1 (последняя цифра это размер элемента)??? Можно конечно добавить в конец еще массив 1024х256 с нулями, но я уверен что можно что нибудь придумать. Loger массив придется раскладывать как минимум 30-40 раз в секунду. Хотя я слышал что некоторые умельцы испоьзуют один и тот же массив по нескольку раз, что несомненно дает прирост производительности... |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.045 |