我目前正致力于注入错误,并且在其中一个应用程序中我想要替换动态部分(Malloc)并使其成为静态,因此它不依赖于内核指令。 这是基本的链表程序。如何替换Malloc指令并仍然使喜欢的列表工作。
struct test_struct* create_list(int val)
{
printf("\n creating list with headnode as [%d]\n",val);
struct test_struct *ptr = (struct test_struct*)malloc(sizeof(struct test_struct));
if(NULL == ptr1)
{
printf("\n Node creation failed \n");
return NULL;
}
ptr1->val = val;
ptr1->next = NULL;
head = curr = ptr1;
return ptr1;
}
答案 0 :(得分:1)
您可以使用固定大小的池编写自己的malloc / free,例如:
typedef struct test_struct T;
#define POOL_SIZE 100
static bool pool_use[POOL_SIZE] = { 0 };
static T pool[POOL_SIZE];
T *t_malloc(void)
{
for (int ii = 0; ii < POOL_SIZE; ++ii)
if ( !pool_use[ii] )
{
pool_use[ii] = 1;
return &pool[ii];
}
return NULL;
}
void t_free(T *t)
{
for (int ii = 0; ii < POOL_SIZE; ++ii)
if ( t == &pool[ii] )
{
pool_use[ii] = 0;
break;
}
}
注意:这只是一个说明内存池概念的基本示例。它可以进行很多优化。关于分配器和内存池有很多理论(如果你做一个综合科学专业的研究生课程,你可以写一篇论文)。
如果您的应用程序将取决于此分配器的速度和/或空间效率,那么您可以对可用的技术进行更多研究。