- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个在我的项目中被多次调用的函数:
void foo(int bar)
{
char arr[1024];
//...do some operation on arr according to value of bar
}
现在,在极少数情况下,当 bar
的值很大时,我会遇到段错误。我需要增加 arr
的大小,我可以从 bar
的值中知道它的大小。
明显的解决方案似乎是根据bar
的大小为arr
动态分配内存。但是,这个函数调用非常频繁,我认为每次都分配内存会降低性能。
我应该采取什么策略来解决这个问题?
最佳答案
两个建议:
foo
也会从调用函数获取一个缓冲区作为参数(例如,如果在循环中从同一个函数调用。如果 我不会在整个程序中传递缓冲区foo
从 100 个不同的地方调用)。这样,您只需在需要增加缓冲区时进行分配。编辑:
关于 #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/
我试图找出在将数据传输到设备之前将数据复制到固定内存是否有意义,因为我对输入数据的分配没有影响(它是一个库)。 std::vector idata(WORK_SIZE); int *idata_ali
model.save() 让我很困惑。 示例。我将我的 mongoose.model(mongoose.schema) 移动到单独的 model.js 文件中。当我使用这种方法创建模型时,以下问题困扰
我正在用 Java Swing 制作模拟时钟。要计算我需要的时钟指针角度: 我可以通过 System.currentTimeMillis() 获得的以毫秒为单位的 UTC 时间 时区偏移 TimeZo
编辑 我的应用程序中有声音,该声音在应用程序启动时开始播放。此外,我还有两种播放和停止声音的方法: -(void)playBgMusic { NSString *path = [[NSBundle m
所以我的应用有 1 个 Activity 和 4 个 fragment ,其中一个有 Chronometer 来显示经过了多少时间。 它工作正常,但我有一个问题,每次我移动到另一个 fragment
我是 FireDAC 新手,遇到问题。我想在Delphi XE7中使用FireDAC读写SQLite数据库。我尝试的大部分方法都有效,但我在将 TTime 保存到 SQLite DB 时遇到问题。 这
这是我使用基本 Node.js 服务器创建的示例站点。我能够成功发布、创建给定架构的用户,然后“保存”到数据库;但是,保存不会返回用户对象,并且在我的实际数据库中找不到。连接也返回成功。 main.j
我有一台配备 2 Gb Nvidia GPU 的 Mac Book Pro。我正在尝试利用我所有的 GPU 内存进行计算(python 代码)。如果我绕过 GUI 界面并仅通过命令行访问我的机器,我可
我希望使用 Powerpoint 创建一种测验,我想保存用户提供的输入。 例如:如果我问这个问题:你最喜欢什么颜色?当他们回答问题并单击下一步按钮时,我想保存文本框的值并将其附加到输出文件中。 我已经
我是一名优秀的程序员,十分优秀!