getmem в библиотеке и вне
Добавлено: 22.09.2014 19:35:38
Доброго времени суток.
Честно говоря вопрос можно решить тестом, но хочется более подробного ответа.
Понятно, что библиотека и сама программа имеют отдельные менеджеры памяти. Понятно, что если выделить память в библиотеке, то освободить можно только там же. Не понятно, почему что-то типа этого:
находящееся внутри библиотеки, вызванное извне, выделит библиотечную память?
Тогда получается, что fpc прилинковывает этот самый менеджер и все getmem'ы направляет на него. Тогда можно ли его заставить не прилинковывать, а память будет выделяться в программе функцией типа вышеприведенной? (расшаривать блоки данных в моей задаче не надо)
А если это выделит все-таки память программы, то в каком случае тогда может быть использована библиотечная (кроме вызовов из initialization).
Если ахинею несу, пардоньте, уже голова не работает.
Честно говоря вопрос можно решить тестом, но хочется более подробного ответа.
Понятно, что библиотека и сама программа имеют отдельные менеджеры памяти. Понятно, что если выделить память в библиотеке, то освободить можно только там же. Не понятно, почему что-то типа этого:
- Код: Выделить всё
function foo_getmem(n:integer):pointer;cdecl;export;
begin
result:=getmem(n);
end;
находящееся внутри библиотеки, вызванное извне, выделит библиотечную память?
Тогда получается, что fpc прилинковывает этот самый менеджер и все getmem'ы направляет на него. Тогда можно ли его заставить не прилинковывать, а память будет выделяться в программе функцией типа вышеприведенной? (расшаривать блоки данных в моей задаче не надо)
А если это выделит все-таки память программы, то в каком случае тогда может быть использована библиотечная (кроме вызовов из initialization).
Если ахинею несу, пардоньте, уже голова не работает.