Здравствуйте, vdimas, Вы писали:
V>Вот простой пример
Не наблюдаю такого в отладчике после лёгкой модифиации кода:
#include <vector>
int main()
{
std::vector<char> chars;
std::vector<double> doubles;
chars.push_back(1);
doubles.push_back(1);
return 0;
}
chars.push_back(1);
00CE107B push eax
00CE107C lea ecx,[chars]
00CE107F mov byte ptr [ebp-29h],1
00CE1083 call std::vector<char,std::allocator<char> >::emplace_back<char> (0CE12F0h)
doubles.push_back(1);
00CE1088 movsd xmm0,mmword ptr [__real@3ff0000000000000 (0CE31A8h)]
00CE1090 lea eax,[ebp-34h]
00CE1093 push eax
00CE1094 lea ecx,[doubles]
00CE1097 movsd mmword ptr [ebp-34h],xmm0
00CE109C call std::vector<double,std::allocator<double> >::emplace_back<double> (0CE1220h)
Q>>Что упущено; из-за чего эффект от оптимизации распухания кода незаметен?
V>Упущена стадия релизной кодогенерации конечного бинарного образа.
Подожди. Для меня как автора библиотеки полученный lib-файл — и есть конечный бинарный образ. Дальше я его поставляю прикладному программисту, а он уже линкует. И указанный lib-файл пухнет. Я не вижу тут проявления упомянутого «это позволяет бороться с распуханием кода после применения шаблонов».
То, что такая оптимизация существует, я не спорю. Только я очень скептически отношусь к тому, что она хоть сколь-нибудь заметно влияет на code bloat. В /cpp.applied как раз недавно обсуждение было на примере OpenCV, где с распуханием борятся ручным стиранием типов, не возлагая надежд на «бинарную склейку»:
http://rsdn.org/forum/cpp.applied/6676361Автор: jazzer
Дата: 24.01.17