реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> ELF and DWARF, уже сюда NCsoft пролез)
wedmeed
сообщение Aug 26 2011, 09:41
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 5-04-11
Из: г.Саратов
Пользователь №: 64 137



Программирую на кейле. Стал встречаться с непонятными вещами, именуемыми ELF. Очень часто упоминается про ELF section. В компиляторе для оптимизации есть пункт One ELF section per Function. Попытался было найти объяснения на форуме. но тут еще и про DWARF говорят, только больше запутался. Что это вообще за секции, файлы, с чем и для чего их вообще едят?
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Aug 29 2011, 04:59
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Эльфы и гномы. Че тут непонятного? sm.gif
А вообще на википедии статьи есть про это.
Go to the top of the page
 
+Quote Post
WHALE
сообщение Aug 29 2011, 11:24
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



вот здесь хорошо расписано.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
wedmeed
сообщение Aug 30 2011, 11:30
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 5-04-11
Из: г.Саратов
Пользователь №: 64 137



Цитата(WHALE @ Aug 29 2011, 15:24) *
вот здесь хорошо расписано.

Спасибо, оценил))). Заодно вспомнил линейковскую молодость

Цитата(andrewlekar @ Aug 29 2011, 08:59) *
А вообще на википедии статьи есть про это.

Про это там написано что это за файлы и из чего они состоят (в частности описание секций и сегментов). Я могу представить для чего такие файлы в кейле - помощь линковщику и т.п.. Но объясните, пожалуйста, каким образом получается, что если в кейловской оптимизации поставить галочку "One ELF section per Function", размер готового исполняемого кода сокращается в два раза? Кеил что, сведения линковщика в контроллер зашивает?

Сообщение отредактировал wedmeed - Aug 30 2011, 11:31
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 30 2011, 13:08
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (wedmeed @ Aug 30 2011, 14:30) *
Кеил что, сведения линковщика в контроллер зашивает?
Линкер подлинковывает только те секции, на которые есть ссылки. Если на функцию нет ссылки - то ее секция не попадет в выходной файл. А если все функции в одной секции - тут уж линкер никак мух от котлет отделить не сможет. Никакой магии.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
wedmeed
сообщение Aug 31 2011, 05:34
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 5-04-11
Из: г.Саратов
Пользователь №: 64 137



Цитата(Сергей Борщ @ Aug 30 2011, 17:08) *
Если на функцию нет ссылки - то ее секция не попадет в выходной файл. А если все функции в одной секции - тут уж линкер никак мух от котлет отделить не сможет. Никакой магии.

Тогда по логике должно получаться наоборот - если все функции (и неиспользуемые) в одной секции, то эта секция должна получаться по размеру больше, чем несколько секций с только используемыми функциями. На практике получилось наоборот.
З.Ы. Я ведь правильно понимаю - секция может быть произвольного размера?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 31 2011, 06:21
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (wedmeed @ Aug 31 2011, 08:34) *
Тогда по логике должно получаться наоборот - если все функции (и неиспользуемые) в одной секции, то эта секция должна получаться по размеру больше, чем несколько секций с только используемыми функциями.
Да, именно так. И именно так и получается.
QUOTE (wedmeed @ Aug 31 2011, 08:34) *
На практике получилось наоборот.
Вы сами себе противоречите:
QUOTE (wedmeed @ Aug 30 2011, 14:30) *
если в кейловской оптимизации поставить галочку "One ELF section per Function", размер готового исполняемого кода сокращается в два раза?
Итого - компилятор кладет каждую функцию в отдельную секцию, линкер берет только необходимые секции => размер уменьшается. Все согласно теории.

Да, секция может быть произвольного размера. Есть какие-то ограничения на уровне ОС, но у вас нету диска такого объема wink.gif


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
wedmeed
сообщение Aug 31 2011, 06:27
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 5-04-11
Из: г.Саратов
Пользователь №: 64 137



Цитата(Сергей Борщ @ Aug 31 2011, 10:21) *
Итого - компилятор кладет каждую функцию в отдельную секцию, линкер берет только необходимые секции => размер уменьшается. Все согласно теории.

Спасибо, неправильно перевел. До этого понимал эту строку как одна секция для всех функций. Пошел за учебником по инглишу... laughing.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 09:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01422 секунд с 7
ELECTRONIX ©2004-2016