gpt4 book ai didi

C 管理函数临时动态内存的有效方法

转载 作者:行者123 更新时间:2023-11-30 17:35:59 26 4
gpt4 key购买 nike

我正在制作一个非确定性有限自动机 (NFA)。 NFA有一组状态,我需要四个相同大小(NFA中的状态数)的数组来记录NFA模拟过程中状态的临时信息。

但是,不同的NFA具有不同的状态数量,因此不同的NFA数组的大小也不同。

使用 C 我想出了三种方法来处理内存分配:

  1. 使用非常大的固定大小数组。

  2. 每次调用函数时都会动态地malloc memroy,并在函数完成之前释放分配的内存

  3. 每次函数调用时都使用malloc但不分配内存,使用四个静态指针变量和一个static int arraySize记录分配的数组大小,第一次调用函数时分配大小为NFA的数组->numStates 并分配给每个静态指针,将 NFA->numStates 分配给 static int arraySize;第二次,如果NFA->numStates小于等于arraySize,则不分配内存;如果 NFA->numStates 大于 arraySize,则释放先前的内存并重新分配大小为 NFA->numStates 的数组。

方法1使用固定大小的数组,这意味着当输入NFA->numStates大于硬编码的数组大小时,该函数将不起作用。

方法2适应性强,但是每次调用函数都需要分配内存,效率不高?

方法3也适用,但是比较复杂,而且不是线程安全的?

建议或其他替代方案?

最佳答案

选项 2 怎么样,但使用 alloca() ,即在堆栈上分配?它比 malloc() 快得多,并且当您离开听起来像您想要的范围时自动取消分配。

当然,它不是标准的或可移植的,因此它可能不适合您。

如果做不到这一点,一个大的固定大小的数组似乎很容易并且不会使用更多的内存。

关于C 管理函数临时动态内存的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22837508/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com