В случае стабильного ABI библиотек, не должны меняться например размеры объявленных структур или смещения полей внутри структур. Простой пример из 20 строк программа+библиотека легко демонстрирует это - в .h файле библиотеки liba объявляем структуру, в .cpp - её простую реализацию; линкуем программу с этой liba, в которой используется структура и выводятся на консоль значения её полей ("1" и "2" например); меняем ABI библиотеки, добавив скажем первым полем в структуру char a[32], компилим библиотеку; программу заново с этой библиотекой не линкуем; теперь программа выводит не 1 2 а значения из массива [32]. Очевидно, что обращения данным идут по адресу, а не по символу. Это всё вроде понятно, и разжёвано много кем (тем же Саттером с Pimpl или Qt-шниками с d-pointers). Теперь самое интересное - КАК происходит обращение к полям структуры в памяти? Интересен полностью подробно весь механизм, начиная от компиляции программы (не библиотеки) и обращения к полям структуры в памяти, почему происходит именно так и не иначе, и т.д. Я что-то обломался найти такую инфомацию, не подскажете?
Спасибо.
Похожие темы
- Форум Segmentation fault при чтении файла. (2003)
- Форум ABI (2005)
- Форум ABI (2003)
- Форум Abi (2005)
- Форум Несовместимое ABI (2014)
- Форум c++ Abi (2015)
- Форум x32-abi (2015)
- Форум C++ ABI (2010)
- Форум ABI & iBCS (2003)
- Форум Internal. Initramfs (2020)