ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
12 июля
442386 Топик полностью
fk0, легенда (16.09.2013 15:08, просмотров: 105) ответил Bill на memset - библиотечная функция. Это-во первых. Во-вторых, команды типа ldir довольно специфичны, мне не встречались
Компилятор может заменять вызов библиотечной функции на inline код. GCC это делает -- факт. Какие там у конкретного CPU команды дело десятое. Просто у многих CPU уровнем по-выше чем пик-контроллеры проф. уровня есть (префикс) команды повторения и блочной пересылки и они используются для вещей вроде memset и memcpy и это эффективнее, чем пересылать в цикле по-байтику. Особенно если CPU 32-битный -- он может разом по 4 байта. Ещё ньюанс -- даже если вызывается и библиотечная функция, то с чего она хуже, чем самодельный цикл? Она в нормальной библиотеке оптимизирована хорошо. GCC вставляет inline код, когда аргументы memset, memmove или memcpy константа -- т.е. ему легко сразу сгенерировать нужный код. Даже если нет блочной пересылки, там может появиться что-то типа такого: clr.b w2 mov.b w2,[w0++] mov.b w2,[w0++] mov.b w2,[w0++] mov.b w2,[w0++] mov.b w2,[w0++] mov.b w2,[w0++] mov.b w2,[w0++] mov.b w2,[w0] mov w1,w0 что явно эффективнее самодельных циклов.
[ZX]