getmem в библиотеке и вне

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Ответить
ger0strat
новенький
Сообщения: 40
Зарегистрирован: 13.05.2014 19:35:56

getmem в библиотеке и вне

Сообщение ger0strat »

Доброго времени суток.
Честно говоря вопрос можно решить тестом, но хочется более подробного ответа.
Понятно, что библиотека и сама программа имеют отдельные менеджеры памяти. Понятно, что если выделить память в библиотеке, то освободить можно только там же. Не понятно, почему что-то типа этого:

Код: Выделить всё

function foo_getmem(n:integer):pointer;cdecl;export;
begin
  result:=getmem(n);
end;

находящееся внутри библиотеки, вызванное извне, выделит библиотечную память?
Тогда получается, что fpc прилинковывает этот самый менеджер и все getmem'ы направляет на него. Тогда можно ли его заставить не прилинковывать, а память будет выделяться в программе функцией типа вышеприведенной? (расшаривать блоки данных в моей задаче не надо)

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

Если ахинею несу, пардоньте, уже голова не работает.
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Код: Выделить всё

uses cmem, ... ;

и в exe и в dll - поставит общий менеджер памяти

>>Не понятно, почему что-то типа этого:
>>находящееся внутри библиотеки, вызванное извне, выделит библиотечную память?
Что непонятного? foo_getmem откуда бы небыл вызван выделит библиотечную память, т.к. внутри его "вкомпилирован" вызов библиотечного менеджера памяти
ger0strat
новенький
Сообщения: 40
Зарегистрирован: 13.05.2014 19:35:56

Сообщение ger0strat »

Меня переклинило на том, что getmem'ы одинаковые. Гугление по подстановке менеджера памяти как в cmem привело к идеальному варианту http://www.freepascal.ru/article/freepascal/20050522025034
Ответить