LINUX.ORG.RU

История изменений

Исправление hibou, (текущая версия) :

Память выделяет ядро. Его можно попросить об этом системными вызовами. А вот о чем именно попросить, тут уже надо рассказывать.

Если подробнее, то рассказ нужно начать с ассемблера. Не очень глубоко. Вы кодили когда-нибудь на ассемблере? Помните из каких секций, сегментов состоит программа? Помните такой сегмент данных?

Так вот, когда программа загружена в память, то место куда она загружена – это и есть сегмент данных, на х86. Примерно сразу после вашего кода – этот сегмент данных заканчивается и начинается стек. Т.е. здесь проходит граница сегмента данных и стека. Собственно, это все. А где же куча?

Стек спускается сверху вниз. И до границы дата-сегмента данные в стеке могут никогда не дойти. Там очень много. 4 гигабайта – полное пространство, а на стек это минус размер дата-сегмента т.е. минус ваш код пока что.

Значит, можно подвинуть границу стека вверх. От него не убудет. Тем самым мы увеличим дата-сегмент. Вот собственно этим и занимается ядро. Вот об этом можно его попросить.

Окей, подвинули мы границу. У нас теперь есть пространство после нашего кода. Вот это и есть та самая куча. И выделение в ней куска на самом деле сводится к разметке Т.е. маллок должен так вести учет этого свободного пространства, чтобы достаточно быстро находить «свободное» место нужного размера для ваших нужд.

Понятно?

Исходная версия hibou, :

Память выделяет ядро. Его можно попросить об этом системными вызовами. А вот о чем именно попросить, тут уже надо рассказывать.

Если подробнее, то рассказ нужно начать с ассемблера. Не очень глубоко. Вы кодили когда-нибудь на ассемблере? Помните из каких секций, сегментов состоит программа? Помните такой сегмент данных?

Так вот, когда программа загружена в память, то место куда она загружена – это и есть сегмент данных, на х86. Примерно сразу после вашего кода – этот сегмент данных заканчивается и начинается стек. Т.е. здесь проходит граница сегмента данных и стека. Собственно, это все. А где же куча?

Стек спускается сверху вниз. И до границы дата-сегмента данные в стеке могут никогда не дойти. Там очень много. 4 гигабайта – полное пространство, а на стек это минус размер дата-сегмента т.е. минус ваш код пока что.

Значит, можно подвинуть границу стека вверх. От него не убудет. Тем самым мы увеличим дата-сегмент. Вот собственно этим и занимаете ядро. Вот об этом можно его попросить.

Окей, подвинули мы границу. У нас теперь есть пространство после нашего кода. Вот это и есть та самая куча. И выделение в ней куска на самом деле сводится к разметке Т.е. маллок должен так вести учет этого свободного пространства, чтобы достаточно быстро находить «свободное» место нужного размера для ваших нужд.

Понятно?