С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Адреса функций - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Помогите в написании программы (C++) http://www.cyberforum.ru/cpp/thread53169.html
За каждый ход генерируется случай n-ое число от 0 до 6 (моделируется выпадание игрального кубика). На основании полученного числа пользователь может взять из общего "банка" n элементов (с...
C++ Работа с FTP Приветы всем! Помогите, пожалуйста, решить такую задачку... вот недавно начал изучать СИ и вот назрела мысль...:) итак, пользователь задаёт хост, логин и пасс от ФТП сервера, далее выбират один из... http://www.cyberforum.ru/cpp/thread52695.html
C++ Баг в MinGW при использовании fread
Ну собственно вот простой тестовый код который выполняется некорректно: #include <cstdio> using namespace std; const int N = 2500; int main() { int *array = new int;
Очень нужен Borland C++ 5.0, подскажите где найти можно? C++
очень нужен Borland C++ 5.0, подскажите где найти можно, уже перелазил в гугле хрен знает сколько страниц
C++ Несколько целей из одного набора исходников в графических средах http://www.cyberforum.ru/cpp/thread51816.html
Имеется некий набор исходников, из которых собираются несколько разных программ. Программы собираются из пересекающегося множества исходников, но с различными опциями. В юниксе для этого используются...
C++ помощь(консультация) в написании прогр.на Си-текст.редактор Тут вот задали написать текстовой редактор на си,выдана программа-заготовка,она по идее якобы тот же текст.ред.но урезанный,в общем беру эту прогу,пытаюсь компилировать,но -куча ошибок(чего в... подробнее

Показать сообщение отдельно
CheshireCat
Эксперт С++
2896 / 1245 / 78
Регистрация: 27.05.2008
Сообщений: 3,405
29.09.2009, 22:57
1. Адреса функций формирует (создает, рождает, генерирует.... синонимов добавить по вкусу) отнюдь не операционная система, а линкер той системы программирования, в которой собирается приложение. Каждому приложению в Windows и в *nix выделяется собственное, отдельное от других приложений виртуальное адресное пространство. Как именно линкер распределит функции по этому виртуальному адресному пространству - его внутреннее дело, в которое нам запускать свои шаловливые ручонки не след.
1.1. Большинство из известных мне линкеров последовательно объединяют в т.н. "секцию кода" (.code или .text) исполняемый код всех единиц компиляции, входящих в проект. Адреса функций при этом, как правило, выравниваются на границу в 16 байт и монотонно нарастают - в том порядке, как эти функции встречает линкер. Т.е, грубо говоря, адрес следующей функции = (адрес предыдущей функции + размер кода в байтах этой предыдущей функции, округленный до кратного 16 в большую сторону). Начальный адрес, от которого "пляшет" компилятор, как от печки, - зависит от ОС и установок компилятора, в Win32, например, это 0x00400000 - базовый адрес загрузки исполняемого файла. С DLL похожая история, только для них базовый адрес 0x10000000.
2. Виртуальные функции имеют смысл только в контексте разговора об объектах каких-либо классов. Если класс имеет виртуальные функции, то в "тело" объекта внедрен указатель на т.н. "таблицу виртуальных функций" (vmt или vft). Где именно будет расположена эта таблица - для каждого типа объектов своя - личное внутреннее дело линкера. Как правило, линкер кладет ее либо в секцию кода (.text), либо в секцию инициализированных констант (.rdata = read-only data).
Исполняемый файл (без разницы, exe или dll) делится на секции - сначала идет заголовок, потом секция кода (.code или .text), потом - .rdata, .idata, .data и т.д., начало каждой секции выравнивается по адресам, кратным 4 кбайт.

"В таком вот аксепте." (с) М.П.Камноедов.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.