![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
bel_nikita |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
Понадобилась, давече, очередь, но непростая, а скоростная. И на ум пришло только: организовать циклический буфер. Т.к. мне кажется, что быстрее и проще ничего на свете не бывает.
Хотел бы, чтобы покритиковали и нашли узкие места: как еще оптимизировать и выкрасть асмовские инструкции ![]()
Может стоит, заменить len = - len; на
З.Ы.: Может в ФАКю кинуть? Пригодится ведь когда-то... ![]() |
||||
|
|||||
Adil' |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 26.8.2004 Где: Питер Репутация: 6 Всего: 15 |
1. Cтранная функция GetLength, даже не стал вникать, что в if происходит... м.б. так проще:
2. Если торопимся, то для больших по размеру типов м.б. лучше использовать буфер, в котором хранятся адреса объектов - меньше времени будет уходить на копирование объектов из памяти в память. З.Ы. Классы, шаблоны и malloc, free - как-то не гармонично? ![]() -------------------- Удачи |
|||
|
||||
bel_nikita |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
Adil'
Да, будет проще. Если вместо size_t был бы int, то я бы так и сделал, но size_t - беззнаковый тип, поэтому
![]() if ( len & (1 << (sizeof( size_t )*8 - 1)) ) - нахождение, является ли, полученный len отрицательным или нет, т.е. проверяется самый старший бит. len = m_LenBuffer - ( -len ); - инвертируем len в представление положительного числа и отнимаем от m_LenBuffer.
Дело в том, что в конечном итоге, это будет буффер для разных физических устройств, которые будут обмениваться между собой через два таких буфера. Т.е. один только пишит, второй только читает. Второй буфер, наоборот, второй пишет, первый читает.
![]() |
||||||||
|
|||||||||
Adil' |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 26.8.2004 Где: Питер Репутация: 6 Всего: 15 |
В погоне за универсальностью можно проиграть в той же скорости для некоего конкретного случая.
-------------------- Удачи |
||||||
|
|||||||
bel_nikita |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
Adil'
Ага, точно ![]()
З.Ы.: а данную циклическую очередь хочу отладить от и до. а то с периодичностью, раз в год приходится копаться в старых исходниках и искать циклический буфер или писать заново, как сейчас ![]() |
||||||
|
|||||||
cardinal |
|
||||||||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
можно заменить на
А кто такие Read и size_t? -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
||||||||
|
|||||||||
bel_nikita |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
cardinal
![]()
![]() Read - это read; size_t - беззнаковый тип, обычно unsigned int. |
||||
|
|||||
cardinal |
|
||||||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
Хуже от этого не будет.
Может, а может просто стоит заменить на
![]() -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
||||||
|
|||||||
bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
cardinal
Как то не очень смотриться ![]() Хотя... асмовская вставка, которая у меня сейчас стоит, тоже не смотриться... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |