The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"gcc+exception+destructor=вздутие кода"
Отправлено Vital, 24-Окт-05 04:33 
Объясните причину следующего явления.
есть код:

struct  ab {
        int     a;
        int     b;

        ab () : a(1), b(2) {}
        ~ab () {}
};

void func ( ab& ){
}

void main () {
        ab AB;
        func (AB);
}

После компиляции получаем код функции main:

main:
        pushl %ebp
        movl %esp,%ebp
        subl $36,%esp
        pushl %ebx
        call __get_eh_context
        movl %eax,%ebx
        movl $1,-8(%ebp)
        movl $2,-4(%ebp)
        movl 4(%ebx),%edx
        movl 4(%edx),%eax
        movl %eax,-20(%ebp)
        movl $_$_2ab,-16(%ebp)
        leal -8(%ebp),%eax
        movl %eax,-12(%ebp)
        leal -20(%ebp),%ecx
        movl %ecx,4(%edx)
        addl $-12,%esp
        pushl %eax
        call func__FR2ab
        movl 4(%ebx),%edx
        movl 4(%edx),%eax
        movl (%eax),%eax
        movl %eax,4(%edx)
        xorl %eax,%eax
        movl -40(%ebp),%ebx
        leave
        ret

Если закомментировать деструктор, получим ожидаемый компактный код:

main:
        pushl %ebp
        movl %esp,%ebp
        subl $24,%esp
        leal -8(%ebp),%eax
        movl $1,-8(%ebp)
        movl $2,4(%eax)
        addl $-12,%esp
        pushl %eax
        call func__FR2ab
        xorl %eax,%eax
        leave
        ret

Почему компилятор так делает и можно ли от этого вылечиться?
Использовался компилятор gcc version 2.95.4 20020320 [FreeBSD]

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру