c - 就内存使用而言,在 c 上重用变量是否比定义新变量更好?
问题描述
嗨,我正在用 C 编程,内存使用在我的项目中非常重要。那么就内存使用而言,在 c 上重用变量是否比定义新变量更好?我的情况是这样的:我写了一个程序,它有很多层(它是 C 中的卷积神经网络),一旦上一层完成,我就进入下一层,一些变量没有使用。那么在下一层中再次使用它们可以帮助我节省内存还是我只是牺牲了太多(例如速度)而获得的内存很少?对于编译器,我使用https://github.com/riscv/riscv-gnu-toolchain
解决方案
正如 UnholySheep 在他们的评论中所说,检查这一点的最简单方法是 A/B 测试。
不过,根据经验,动态分配非常慢,尤其是对于大变量,如果您正在执行以下操作:
void myfunc()
{
for(int i=0; i<1000; i++)
{
uint128_t* myBigArray = malloc(1000*sizeof(uint128_t));
doSomething(myBigArray);
free(myBigArray);
}
}
考虑将数组声明移出循环,使其更像这样:
void myfunc()
{
uint128_t* myBigArray = malloc(1000*sizeof(uint128_t));
for(int i=0; i<1000; i++)
{
doSomething(myBigArray);
}
free(myBigArray);
}
如果您不使用任何动态分配,请使用类似的东西:
void myfunc()
{
uint128_t myBigArray[1000];
for(int i=0; i<1000; i++)
{
doSomething(myBigArray);
}
}
据我所知应该没有什么区别
推荐阅读
- winforms - 将所有 DLL 和资源组合到一个用于 Winforms 程序的 EXE 中?ILMerge 似乎即将退出市场?
- uikit - UIkit 拖动时可排序的鼠标位置
- json - JSON 未根据架构进行验证
- policy - Hashicorp Vault - UI 的模板策略问题
- python-3.x - Python3,scipy.optimize:将模型拟合到多个数据集
- r - R中的箱线图比较两个数据框
- jmeter-plugins - JMeter 基本图抛出空指针异常
- java - 使用 Gradle 将编织方面后编译到项目中
- python-3.x - 如何修复仅在写入 Google 表格时遇到的 403 错误
- ios - 从 RN 0.60.6 升级到 0.61.2 抛出 ld: library not found for -lReact