Я пытаюсь реализовать ownmalloc()
, вызывая оригинал malloc()
только один раз в начале кода.
Используя эту память, возвращаемую исходным malloc()
, каждый вызов ownmalloc()
из пользовательской программы использует эту память для выделения.
Имеется 2 списка, выделенных и нераспределенных.
ownfree()
функция удаляет выделенную память и добавляет обратно в нераспределенные блоки, упорядочивает их и делает смежные блоки адресов единым блоком
У меня два вопроса:
Как я могу запретить пользователю использовать неавторизованную память во время выполнения, например, пользователь запросил 10 блоков и использует 13 блоков для записи данных.
ownmalloc()
вызывает функцию (скажем, x), которая, в свою очередь, вызывает исходный malloc()
и занимает блок памяти, который будет использоваться ownmalloc()
несколько раз. Как я могу убедиться, что ownmalloc()
вызывает эту функцию x()
только один раз (во время первого вызова), а при последующих вызовах не следует выполнять вызов функции x()
.
Я попробовал это с этим подходом, но он не работает в c
typedef struct mem{
int sz;
struct mem *next;
}node;
node *block;
static bool init=false;
void* x(){
//call to original malloc
}
void* ownmalloc(size){
if(!init){
block=x();
init=true;
}
}
Всякий раз, когда я пытаюсь позвонить в эту функцию, ownmalloc()
x()
вызывается каждый раз. Как мне сделать так, чтобы он звонил только один раз?