Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
NoobsEnslaver
135 / 47 / 2
Регистрация: 31.07.2014
Сообщений: 232
#1

Зависит ли производительность приложения от версии ABI? - C++

22.10.2014, 12:40. Просмотров 255. Ответов 1
Метки нет (Все метки)

Привет народ, такой вопрос: начал тут копаться в командах GCC и наткнулся на -fabi-version= n, где n[0;8]. Почитал что такое ABI - это набор реализаций механизмов, объявленных стандартом, так вот, влияет ли версия ABI на размер или производительность конечного прилохения?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2014, 12:40     Зависит ли производительность приложения от версии ABI?
Посмотрите здесь:

Насколько profile guided optimization увеличивает производительность приложения? - Visual C++
Всем здравствуйте, и сразу спрашиваю, кто пользовался в студии profile guided optimization, насколько он увеличивает скорость работы...

Создание Trial-версии приложения - C++ Builder
Здравствуйте, я тут делаю одну программу, точнее собираюсь, вот хочу спросить у вас, как сделать так что бы программа была при установке...

Ошибка DLL в Release версии приложения - C++ Builder
Я написал DLL hiper.dll, подключил её к своему приложению через LoadLibrary. В Debug версии всё работает отлично! Но в Release версии...

Поток же не зависит от формы? - C++ Builder
Не могу понять почему форма зависает при выполнение потока? Вот код. Unit4.cpp ...

Label зависит от переменной - C++ Builder
Как сделать, чтобы текст в label менялся в зависимости от значения a (int)a==1 label=="РазДва" a==2 ...

От чего зависит размер char и int - C++
Задача на С. Есть структура: struct myStruct { char a; int b; }; От чего зависит размер int и char? Вроде у int...

От чего зависит скорость выполнения программы? - C++
от чего больше всего зависит скорость выполнения программы?

составьте програму...от вас зависит моя судьба!!) - Visual C++
Составить программу вычисления среднего геометрического положительных элементов массива из 10 элементов, заданного как константа.

Результат функции зависит от ёё расположения в коде О_о - C++
Подскажите студенту пожалуйста в чём у меня косяк (ну кроме ДНК ): Функция по разному реагирует на расположение в коде . При...

Найти значение функции A, которая зависит от трёх переменных - C++
Нужно создать программу для вычисления функции A, которая зависит от трёх переменных x, y, z. Ввод значения переменных сделать с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
22.10.2014, 13:52     Зависит ли производительность приложения от версии ABI? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от NoobsEnslaver Посмотреть сообщение
Почитал что такое ABI - это набор реализаций механизмов, объявленных стандартом
ABI - это Application Binary Interface. Понятие объемлющее. Вот тебе пример:
Ты написал dll, приложил к ней заголовочный файл (функции в заголовочном файле - это API, Application Program Interface).
потом ты написал приложение, с использованием этой dll. После того, как приложение собрано между ним и dll возникает понятие ABI: вызовы, данные (типы, набор полей в структурах, выравнивание и т.д.), после компиляции образуют ABI. Приложение, которое ты написал "закладывается" на определенный порядок передачи аргументов в функции, типы данных и их размер, и т.д. Исходя из этого, регистры и память обретают определенный смысл, смещения делаются на те величины, которые соответствуют желаемому результату и т.д.
Т.е. и dll и приложение ждут определенных данных в регистрах и памяти и предоставляют определенные данные в регистры и память - вследствие этого, могут взаимодействовать. Это если грубо.

Теперь к GCC. Как известно, это далеко не новый продукт. У него богатая история. И ABI - менялся с течением времени (потому что менялся API) т.е. внутренние функции, генерируемые компилятором (например реализация исключений), меняли название. Меняли название внутренние функции стандартной библиотеки, менялось количество полей в библиотечных структурах (посмотри хотя бы содержимое структуры FILE за разный промежуток времени), добавлялись параметры, менялся способ декорации имен функций в С++ и т.д. Например gcc 2.95 совершенно подругому, чем 3 или gcc 4.х.х, декорирует имена для С++. Так вот, этот флаг нужен для того, чтобы попытаться подружить версии бинарников, написанные в разные временные промежутки, с использованием разных версий gcc и, следовательно, с разным ABI.
Ну, например, (гипотетическии) версия ABI (а) могла класть параметры в стек c использованием смещения esp каждый раз при добавлении нового параметра (скажем, командой push), а версия ABI (b) смещала esp сразу на нужное значение с учетом количества и размера всех параметров, т.е. один раз после факта помещения их на стек. Вот такие вещи и пытается разруливать эта опция.

Влияет ли ABI на скорость? Разве только косвенно. Причем влиять может как в минус так и в плюс. Но этот флаг, повторюсь, не для оптимизации, он для совместимости.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru