C语言 malloc 的全局数组



我正在做一个项目,我需要对一些数据进行恶意处理。我正在尝试通过更改我使用的主要结构值来减少程序的堆峰值。我正在使用链表。我的结构是这样的:

struct myS{
int a,b;
float a,b;
struct myS *next;
};

我在想,而不是错误地分配结构指针,我会将其存储在全局数组中,因为我没有太多数据。我该怎么做?

如果你有你需要的元素数量的上限,你可以创建一个全局数组[不是动态分配的],让它被struct myS heap[],和一个整数idx,初始化为0。分配元素后,需要增加idx,并将此元素附加到请求者。

注意 - 仅当您不希望删除元素 [或者您可以负担得起只分配每个元素一次] 时,这才是一个很好的解决方案
如果你确实需要删除,你需要分配一个额外的数组来告诉你当前正在使用哪些元素,做idx循环[随idx = (idx + 1) % size增加],并在给出之前检查每个元素是否被分配,但正如我所说 - 这可能会更耗时!

代码捕捉 [不支持删除]:

struct myS heap[SIZE];
int idx = 0;
...
struct myS* allocate() {
  return &(heap[idx++]);
}

注意:上面的代码快照很危险 - 如果您尝试分配更多元素,它可能会溢出 SIZE .

你可以做这样的事情:

struct myS myArray[ARRAY_SIZE];
/* ... */
struct myS *head = &myArray[0];
head->next = &myArray[1];
head->next->next = &myArray[2];
/* etc... */

使用的数组索引不必是顺序的,例如 head可以是索引3head->next可以是索引21

如果要初始化列表以一次使用数组中的所有条目,则可以循环进行:

struct myS *node = head;
for (int i = 1; i < ARRAY_SIZE; i++)
{
    node->next = &myArray[i];
    node = &myArray[i];
}
node->next = NULL;  /* Make sure the tail of the list doesn't have a 'next' pointer */

相关内容

  • 没有找到相关文章

最新更新