【发布时间】:2014-05-15 06:34:59
【问题描述】:
我正在制作一个非确定性有限自动机 (NFA)。一个 NFA 有一组状态,我需要四个大小相同(NFA 中的状态数)的数组来记录 NFA 模拟过程中有关状态的临时信息。
但是,不同的NFA具有不同的状态数,因此数组的大小因不同的NFA而异。
使用C我想出了三种处理内存分配的方法:
使用一个非常大的固定大小的数组。
每次调用函数时动态malloc memroy,并在函数结束前释放分配的内存
每次函数调用都使用malloc但不分配内存,使用四个静态指针变量,一个静态int arraySize记录分配的数组大小,第一次调用函数时,分配大小为NFA-的数组>numStates 并分配给每个静态指针,将 NFA->numStates 分配给 static int arraySize;第二次,如果NFA->numStates小于等于arraySize,不分配内存;如果 NFA->numStates 大于 arraySize,则释放先前的内存并重新分配大小为 NFA->numStates 的数组。
方法1使用固定大小的数组,即当输入的NFA->numStates大于硬编码的数组大小时,该函数将不起作用。
方法2适应性强,但每次调用函数都需要分配内存,效率不高?
方法3也适用,但是比较复杂,不是线程安全的?
建议或其他选择?
【问题讨论】:
-
使用 VLA? [15 个字符]
标签: c memory-management dynamic-memory-allocation