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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Используя функцию MPI_Alltoall, переслать в каждый процесс три очередных числа http://www.cyberforum.ru/cpp/thread1281604.html
Доброго времени суток, как выяснилось, для меня параллельное программирование что то из рода неясного.До сих пор не могу въехать в саму суть этого дела, на этом ступор у меня. Необходимо сделать вот такую вот задачу, В каждом процессе дан набор из 3 K - целых чисел, где K — количество процессов. Используя функцию MPI_Alltoall, переслать в каждый процесс три очередных числа из каждого набора...
C++ Прекращение работы программы int main() { string s; int c=0; int g={0}; int j=1,i=1; cin>>s; http://www.cyberforum.ru/cpp/thread1281428.html
C++ Требуется написать скрипт (.tcl) для командной irc-викторины
Требуется написать скрипт (.tcl) командной irc-викторины (teamquiz) для бота.
C++ Закрытие программ через командную строку
помогите, вирус поймал, блочит гугл, в диспетчер захожу, при наведении на процессы, процессы исчезают, как через командную строку закрыть процесс? Удалить не могу, т.к. открыто в процессах. Genesis_10190705.exe
C++ Как получить доступ к элементам формы из созданного класса? http://www.cyberforum.ru/cpp/thread1279060.html
Всем доброго времени суток!:help: Скажите, пожалуйста, как мне обратиться к элементу формы(например TextBox1) извне, то есть из созданного мною класса. Прочитал уже много форумов, а определенного решения так и не нашел. Например: class Matrix { private: int N, M; public: void setSize(int N, int M)
C++ Разработать классы для описанных ниже объектов. Включить в класс методы set (…), get (…), show (…) С++ Ребята, напишите мне пожалуйста код я буду очень признательна :kiss: :-* Разработать классы для описанных ниже объектов. Включить в класс методы set (…), get (…), show (…). Определить другие методы. Написать программу, демонстрирующую работу с этим классом. Customer: Фамилия, Имя, Отчество, Адрес, Телефон, Номер кредитной карточки, Номер банковского счета. Определить находиться ли номер... подробнее

Показать сообщение отдельно
DrOffset
6851 / 4062 / 927
Регистрация: 30.01.2014
Сообщений: 6,859
22.10.2014, 13:52     Зависит ли производительность приложения от версии ABI?
Цитата Сообщение от 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 на скорость? Разве только косвенно. Причем влиять может как в минус так и в плюс. Но этот флаг, повторюсь, не для оптимизации, он для совместимости.
 
Текущее время: 10:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru