А выкусить только аллокатор в объектный файл нереально?Siemargl wrote:В gcc действительно свой субаллокатор, в tcc я делать пока не стал - используется системный.
Но прикрутить libc от gcc (в виде PE DLL) к не си- программам будет нетривиально.
Выделение памяти
//DG, я вообще-то написал по дефолту. А если кому-то нужно сделать подмену. Например, для тестирования или отладки, то вот тогда и lib_init вызывать лишь при необходимости.
А то сейчас программы вынуждены из-за прихоти разработчиков таких библиотек таскать с собой вот это http://websvn.kolibrios.org/filedetails ... %2Fdll.inc А так бы GetProcAddress было бы достаточно.
А то сейчас программы вынуждены из-за прихоти разработчиков таких библиотек таскать с собой вот это http://websvn.kolibrios.org/filedetails ... %2Fdll.inc А так бы GetProcAddress было бы достаточно.
Это не мешает выделить виртуальную память, т.е. диапазон адресов. Если ты начнёшь эту память обнулять, получишь страничную ошибку, когда физическая память закончится.Там в левом нижнем углу написано Free memory(KB): 203716, а это меньше, чем запрошено(203716 < 1048576).
Я проверял в VBox и VMware Player c 256 Мб
Serge, попробую по-другому тогда объяснить.
Приложение1 резервирует всю память,
Приложение2 резервирует всю память,
..............
потом, когда приложения начнут её использовать, кто-то словит pagefault.
Приложение1 резервирует всю память,
Приложение2 резервирует всю память,
..............
потом, когда приложения начнут её использовать, кто-то словит pagefault.
0CodErr
Словит, когда свободные страницы закончатся. Но в твоём случае вылезает не страничное нарушение, a gpf - общее нарушение защиты.
Словит, когда свободные страницы закончатся. Но в твоём случае вылезает не страничное нарушение, a gpf - общее нарушение защиты.
Да это, похоже, не к этой теме относится.Serge wrote:Но в твоём случае вылезает не страничное нарушение, a gpf - общее нарушение защиты.
Хорошо, как перед использованием какой-либо страницы определить, свободна она, или её уже кто-то другой использует?Словит, когда свободные страницы закончатся.
Ты говорил, что надо В цикле с шагом в 4Кб пройти по всем страницам. Это закрепит физ. страницы по адресам. Так почему бы ядру самому не закрепить страницы?
Так и я говорю: по дефолту ты просто прокидываешь адрес стандартных процедур. То, что надо с собой что-то таскать - совсем другой вопрос.0CodErr wrote://DG, я вообще-то написал по дефолту. А если кому-то нужно сделать подмену. Например, для тестирования или отладки, то вот тогда и lib_init вызывать лишь при необходимости.
А то сейчас программы вынуждены из-за прихоти разработчиков таких библиотек таскать с собой вот это http://websvn.kolibrios.org/filedetails ... %2Fdll.inc А так бы GetProcAddress было бы достаточно.
Ококок, я воспринял "lib_init" как абстрактный вызов для инициализации данной библиотеки. А ты о конкретном lib_init, извини. еще не привык к вашему языку
В Колибри есть что-то типа MEM_RESERVE/MEM_COMMIT? Ну, вызываешь ты функцию "дай мне памяти, ядро и закрепи-ка физические сразу" или просто "зарезервируй мне диапазон".0CodErr wrote:Да это, похоже, не к этой теме относится.Serge wrote:Но в твоём случае вылезает не страничное нарушение, a gpf - общее нарушение защиты.Хорошо, как перед использованием какой-либо страницы определить, свободна она, или её уже кто-то другой использует?Словит, когда свободные страницы закончатся.
Ты говорил, что надо В цикле с шагом в 4Кб пройти по всем страницам. Это закрепит физ. страницы по адресам. Так почему бы ядру самому не закрепить страницы?
А то если нет подкачки, резервирование без закрепления - странная штука.
Ты про физическую страницу ? Физический адрес которой не имеет смысла в виртуальном адресном пространстве процесс ? А что это тебе даст ?Хорошо, как перед использованием какой-либо страницы определить, свободна она, или её уже кто-то другой использует?
Serge, нет, я про виртуальную, которую будет использовать процесс в юзермоде.
Страница выделяется при первом обращении к ней. И остаётся закреплённой, пока процесс её не вернёт ядру.
Serge, первое обращение может совершить и любой другой процесс, зарезервировавший эту память. Получается, кто первый встал — того и тапки? А остальные pagefault поймают.
Ну обсуждалось же уже, тему перечитай.
Нет, не может. У другого процесса другое адресное пространство. Общее только пространство ядра, юзерспейс индивидуальный.первое обращение может совершить и любой другой процесс, зарезервировавший эту память.
Обсуждалось-то оно обсуждалось, а толку? Мне больше всего "понравился" 3-ий пункт алгоритма Serge viewtopic.php?f=2&t=3297&start=15#p65652
Ну разве кто-то будет использовать эту ОС для серьёзных вещей? Представьте, что от этого зависила бы работа дорогостоящего оборудования. Я уж не говорю про жизнь людей. А тут, понимаешь, Скрестить пальцы.
Так и представляю, пишет кто-то багрепорт, а Serge ему: "Пальцы скрещивали?"
Ну разве кто-то будет использовать эту ОС для серьёзных вещей? Представьте, что от этого зависила бы работа дорогостоящего оборудования. Я уж не говорю про жизнь людей. А тут, понимаешь, Скрестить пальцы.
Так и представляю, пишет кто-то багрепорт, а Serge ему: "Пальцы скрещивали?"
А я и не про это вовсе. Если 2 приложения зарезервируют каждый всю свободную память, то при обращении к ней рано или поздно у кого-то будет pagefault.Нет, не может. У другого процесса другое адресное пространство.
Who is online
Users browsing this forum: No registered users and 2 guests