Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaпри этом даже гуру C++ прямо говорят - идея, что давайте все раскопипастим, а компилятор все это чудесно заоптимизирвет - оказалась пшиком, никакого прироста производительности никто так и не смог достичь, зато исполнимый код бухнет, вымывая L2/L3 кеши просто на ура.Не пшик, реально есть такая оптимизация. В Visual C++ она называется «identical comdat folding» (ICF) и реализована уже давно, в Visual C++ 6 точно есть. Например, есть программа: test_icf.cpp Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. parts.cpp Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. roots.cpp Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. «extern "C"» использовал, чтобы link-овочные имена были читабельные, без mangling-а. Смотрим сгенерированный map-файл (конфигурация Release): test_icf.map Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Функции add_part и add_root компилируются в одинаковый машинный код, поэтому linker разместил их в одном месте. Тут ещё наверняка важно, что нигде в C++-коде не берётся адрес этих функций, а значит не требуется идентичность (уникальность адреса). Скорее всего, эта оптимизация была сделана из-за шаблонов. Функции std::list<part_t*>::push_back и std::list<root_t*>::push_back компилируются в одинаковый машинный код, а их адрес обычно не берут. Тут правда есть одна тонкость. Если операционная система пишет что-нибудь типа «случился crash по адресу 00401093», то вы не сможете узнать, в какой функции, в add_part или add_root. То же самое со stack trace, который строится по адресам функций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2017, 04:28 |
|
||
|
|

start [/forum/topic.php?fid=57&startmsg=39431750&tid=2018218]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 270ms |
| total: | 399ms |

| 0 / 0 |
