Re[17]: Бинарная склейка
От: vdimas Россия  
Дата: 24.01.17 16:29
Оценка:
Здравствуйте, Qbit86, Вы писали:

V>>Ну, в несколько раз конечный образ обычно уменьшается.

Q>Ну смотри. Я компилировал указанные выше четыре исходника в MSVS 2015 в статическую библиотеку.

Считай, что статическая библиотека при включенной опции "link time code generation" — это просто некий байт-код. ))


Q>Что упущено; из-за чего эффект от оптимизации распухания кода незаметен?


Упущена стадия релизной кодогенерации конечного бинарного образа.

Вот простой пример:
#include <vector>

int main()
{
    std::vector<int> ints;
    std::vector<float> floats;

    ints.push_back(1);
    floats.push_back(1);

    return 0;
}


Вот его дисассемблинг в отладчике в релизе:
    ints.push_back(1);
0014104D  lea         ecx,[ints]  
00141050  mov         byte ptr [ebp-4],1  
00141054  call        std::vector<float,std::allocator<float> >::_Reserve (0141140h)  
...

    floats.push_back(1);
014106A  lea         ecx,[floats]  
0014106D  mov         dword ptr [ebp-20h],eax  
00141070  call        std::vector<float,std::allocator<float> >::_Reserve (0141140h)


А вот освобождение памяти обоих контейнеров перед выходом из scope:
    return 0;
00141083  lea         ecx,[floats]  
00141089  call        std::vector<int,std::allocator<int> >::_Tidy (01410C0h)  
0014108E  lea         ecx,[ints]  
00141091  call        std::vector<int,std::allocator<int> >::_Tidy (01410C0h)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.