gpt4 book ai didi

c - 如何避免动态分配内存以节省时间?

转载 作者:太空宇宙 更新时间:2023-11-04 00:12:43 25 4
gpt4 key购买 nike

我有一个在我的项目中被多次调用的函数:

void foo(int bar)
{
char arr[1024];
//...do some operation on arr according to value of bar
}

现在,在极少数情况下,当 bar 的值很大时,我会遇到段错误。我需要增加 arr 的大小,我可以从 bar 的值中知道它的大小。

明显的解决方案似乎是根据bar 的大小为arr 动态分配内存。但是,这个函数调用非常频繁,我认为每次都分配内存会降低性能。

我应该采取什么策略来解决这个问题?

最佳答案

两个建议:

  1. 动态分配,但重复使用缓冲区。所以 foo 也会从调用函数获取一个缓冲区作为参数(例如,如果在循环中从同一个函数调用。如果 我不会在整个程序中传递缓冲区foo 从 100 个不同的地方调用)。这样,您只需在需要增加缓冲区时进行分配。
  2. 像现在一样声明一个大的本地数组,但在使用之前确保它足够大。如果没有,则在堆上动态分配一个。假设本地数组对于大多数情况来说足够大,您只会在极少数情况下在堆上进行分配。

编辑:

关于 #2,@David Heffernan 因建议相同的选项而受到热议,因为它可能是代码的复杂化。我认为以下内容并不复杂:

void foo(int bar)
{
char localArr[1024];
char* arr = localArr;
if (sizeNeeded > 1024)
arr = malloc(sizeNeeded);

// ... use arr in logic ...

if (arr != localArr)
free(arr);
}

我在一些无法重用缓冲区的频繁调用的回调中使用了类似的代码,并且在大多数情况下消除 malloc 确实提高了性能。我真的不知道这是否是 OP 的最佳解决方案。

关于c - 如何避免动态分配内存以节省时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7376684/

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