数组和指向数组的指针之间的区别
difference between array and pointer to array
Hello Stack 溢出社区,
由于嵌入式系统资源有限,我们必须注意内存分配。
所以,我的问题是关于这个主题(如何节省内存?)
假设我们有这段代码:
extern float externArray[2500];
float testArray[2500];
void fillArray()
{
for (unsigned i = 0; i < sizeof(testArray) / sizeof(float); i++)
testArray[i] = externArray[i];
}
如果您想知道为什么我要将 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];
}
所以我想知道第二个是否会因为我使用指向数组的指针而在内存方面得到更优化?
使用更多堆是否值得(我的意思是指向数组的指针多于数组)?
谢谢
由于管理分配和释放所需的对齐和堆管理元数据,动态内存分配在内存使用方面的效率会略有下降。
然而,一个更重要的问题是动态分配的非确定性。分配将花费可变时间,并且可能会失败。静态分配的数组不需要时间并且保证可用。
Hello Stack 溢出社区,
由于嵌入式系统资源有限,我们必须注意内存分配。
所以,我的问题是关于这个主题(如何节省内存?)
假设我们有这段代码:
extern float externArray[2500];
float testArray[2500];
void fillArray()
{
for (unsigned i = 0; i < sizeof(testArray) / sizeof(float); i++)
testArray[i] = externArray[i];
}
如果您想知道为什么我要将 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];
}
所以我想知道第二个是否会因为我使用指向数组的指针而在内存方面得到更优化?
使用更多堆是否值得(我的意思是指向数组的指针多于数组)?
谢谢
由于管理分配和释放所需的对齐和堆管理元数据,动态内存分配在内存使用方面的效率会略有下降。
然而,一个更重要的问题是动态分配的非确定性。分配将花费可变时间,并且可能会失败。静态分配的数组不需要时间并且保证可用。