AZJIO
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору polromserg Цитата: если просто выделить память по указателю в моей программе, то память будет в адресном пространстве моей программы, и scintilla туда доступ не получит, даже по переданному указателю | Нет. Я с Virtual не приходилось встречаться, но обычное выделение памяти оно ни в чьём адресном пространстве, именно поэтому есть утечки памяти, так как программа выделяет память допустим в цикле, но программист не удосужился её отдать обратно винде, дав сигнал диспетчеру памяти отметить её ненужной, законченой от использования. Программист может ошибиться или вызвать функцию не зная что после её работы нужно запустить функцию освобождения ресурсов и возвращения памяти винде, ведь Winapi функции тоже могут выделять для себя память получив дескриптор на объект, откуда системе знать что объект уже не будет использоваться. Самой scintilla без разницы чьё там адресное пространство. Указатель это универсальная вещь, scintilla возвращает в указатель, тут нет понятия может или не может, указатель это число ячейки памяти. Вот у тебя лоток на 10 яиц, ты положил 5 штук, у тебя осталось 5, ты ложишь в 8-ю и 9-ю ячейку 2 яйца, говоришь другу, возми 2 яйца с 8 ячейки или возьми от 4-й ячейки пока не встретишь пустую, он возьмёт 4-ое и 5-ое. Этот способ нуль-терминированная строка, когда данные заканчиваются пустой ячейкой. А если скажешь возьми с 4-й 5шт, то возьмёт с 4-го по 8-й, это способ с указанием длины, когда нуль-терминированная строка сама может оказаться данными (бинарными). Ещё раз: указатель не имеет разрешения или не разрешения, он может только отличатся шириной для x86 и x64 систем, но нет никаких свойств, ты даже можешь испортить данные любой проги просто дав указатель на прогу в памяти и scintilla запишет текст в то место где находится твоя прога и она (прога) тут же загнётся. Суть диспетчера памяти помечать занятую и свободную память. Когда ты заказал у диспетчера памяти 32кб памяти он возвращает тебе указатель на ту память которую он тебе выделил. Когда ты дашь сигнал освободить память, он пометит это пространство свободным именно 32 кб, и другие проги заказав себе память получат эту память в том числе эти 32кб , которые ранее были заняты. Диспетчер памяти не запрещает тебе писать в любое место, он только выделяет тебе память чтобы не испортить другие проги в памяти. То есть если ты выделил 32 кб, а пишешь в данные 33 кб, то последние 1 кб могут оказаться записанными поверх каких либо данных, то есть можно испортить что-то, если это будут данные торрента то он скинет в файл испорченные данные, если это прога, то начнёт сбоить или упадёт сразу. | Всего записей: 4562 | Зарегистр. 03-05-2006 | Отправлено: 13:02 22-09-2019 | Исправлено: AZJIO, 13:12 22-09-2019 |
|