【问题标题】:Malloc replacement by user用户替换 malloc
【发布时间】:2013-10-20 16:30:37
【问题描述】:

我想就我自己的项目向您寻求帮助。 我想尝试用我自己的函数替换原来的 malloc、free 函数,这些函数具有相同的行为。

int memory_free(void *ptr){}
void memory_init(void *ptr, unsigned int size){}
void *memory_alloc(unsigned int size){}

memory_init 函数将创建一个可使用的内存。在开始时会有一个指针,例如 *Memory,它将是 memory_init 的参数。 Memory init 只会在程序开始时被调用一次。

#include <string.h>

int main()
{
  char region[50];
  memory_init(region, 50);
  char* pointer = (char*) memory_alloc(10); 
  if (pointer)
  memset(pointer, 0, 10);
  if (pointer)
  memory_free(pointer);
  return 0;
}

此代码是测试我的功能的示例。 Memory_init 将初始化内存,而 memory_alloc 将为每次调用在此内存中创建块。 如果有人知道如何制作它,我将很高兴看到您的回答。 对不起我的英语不好。 谢谢。

对于 memory_init 我有这个

*Memory;
 void memory_init(void *ptr, unsigned int size){
 *((unsigned int*)ptr)=size; //at first position there will be size of whole memory;

}

我的想法是做一块内存,里面会有一个小块。每个块都会有头。在第一个位置会有块的大小,在它之后会有标签,如果它是空闲的,在它之后会有块的结尾。

【问题讨论】:

    标签: c++ memory dynamic malloc allocation


    【解决方案1】:

    经典的 Kernighan&Ritchie “The C Programming Language”的第 8.7 节用简单的术语准确地描述了您所要求的内容。您可以在网上的各个地方找到它的副本。您还可以找到更复杂的 malloc 实现 herehere

    【讨论】:

      【解决方案2】:

      malloc() 使用 sbrk 系统调用来请求更多内存。 Afaik 这是唯一的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-08
        • 2023-04-04
        • 1970-01-01
        • 2013-01-25
        • 2012-11-22
        • 2014-07-14
        • 1970-01-01
        • 2012-05-05
        相关资源
        最近更新 更多