【发布时间】:2011-09-24 01:49:59
【问题描述】:
如果这是一个非常愚蠢的问题,我提前道歉......
目前我有一个循环链表。节点的数量通常保持不变。当我想添加时,我会 malloc 一些节点(例如 100000 左右)并将其拼接起来。当我一个一个地 malloc 节点时,这部分工作正常。
我想尝试按块分配:
NODE *temp_node = node->next;
NODE *free_nodes = malloc( size_block * sizeof( NODE ) );
node->next = free_nodes;
for ( i = 0; i < size_block - 1; i++ ) {
free_nodes[i].src = 1;
free_nodes[i].dst = 0;
free_nodes[i].next = &free_nodes[i+1];
}
free_nodes[size_block - 1].next = temp_node;
只要我不尝试释放任何东西(“检测到 glibc:双重释放或损坏”错误),该列表就可以工作。直观地说,我认为这是因为释放它不会释放单个节点,并且通过正常方式循环尝试多次释放它(加上释放整个块可能会破坏仍然存在的节点的所有其他指针? ),但是:
- 谁能明确地向我解释发生了什么?
- 有没有办法按块分配节点而不破坏东西?
这样做的目的是因为我调用 malloc 数十万次,如果事情更快,那就太好了。如果有更好的解决方法,或者我不能指望它会变得更快,我也会很高兴听到这个消息。 :)
【问题讨论】:
标签: c linked-list