你好堆栈溢出社区,
由于嵌入式系统资源有限,我们必须注意内存分配。
所以,我的问题是关于这个话题(如何节省内存?)
假设我们有这样一段代码:
extern float externArray[2500];
float testArray[2500];
void fillArray()
{
for (unsigned i = 0; i < sizeof(testArray) / sizeof(float); i++)
testArray[i] = externArray[i];
}
Run Code Online (Sandbox Code Playgroud)
如果您想知道为什么我要将 externArray 复制到 testArray 中,我的应用程序要求我这样做(因为我将传递externArray给一个将修改其值的函数)。如果您有更好的方法来做到这一点,欢迎您提供反馈。
现在我已经这样做了:
extern float externArray[2500];
float *testArray;
void fillArray()
{
testArray = (float*) malloc(2500 * sizeof(float));
for (unsigned i = 0; i < sizeof(externArray) / sizeof(float); i++) //here I have to change size of testArray to size of externArray because it's no more longer allocated on the stack
testArray[i] = externArray[i];
}
Run Code Online (Sandbox Code Playgroud)
所以我想知道第二个是否会在内存方面得到更优化,因为我使用的是指向数组的指针?
使用更多堆是否值得(我的意思是指向数组的指针比指向数组的指针多)?
谢谢
由于管理分配和解除分配所需的对齐和堆管理元数据,动态内存分配在内存使用方面的效率略低。
然而,一个更重要的问题是动态分配的非确定性。分配将花费可变时间,并且可能会失败。静态分配的数组不需要时间,并且保证可用。
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |