【发布时间】:2014-05-26 08:45:21
【问题描述】:
如果方法经常被调用,可以在方法中使用静态数组来提高性能
static char [1024];
我想问的是,如果数组大小像 128 或 64 一样小,那么样本一和样本二中哪一个更有利。 示例 1:
void foo(){
static mArr char[128];
memset(mArr,0x0,128);//not sure if this line is necessary but I think its a must , any commends appriciated.
}
示例 2:
void foo(){
char mArr[128];
}
【问题讨论】:
-
而不是
memset()只初始化您的数组一次:char mArr[128]{0}; -
是的,但是当数组是静态的时,只有在第一次调用数组被创建时,对于其他调用,新数组未分配,在这种情况下它使用前一个数组数据是愚蠢的吗?如果是这种情况,我认为您的答案可能行不通。
-
static表示数组在不同的函数调用中是持久的。因此,对于下一次调用,内存不是垃圾,而是包含上一次调用的数据。 -
“哪个更有利” - 有利为了什么?他们做完全不同的事情。前者具有静态链接,每个条目都会清除
mArr,并且不是线程安全的。后者是自动的并且在进入时是不确定的。 您要解决什么问题? 性能?尽可能少地写入和读取内存。在这两者中,#2显然“表现”更好,因为它什么都不做。 -
测量,不要猜测。 (任何潜在的节省都不会被线程安全性的损失所抵消)。
标签: c++ arrays performance function static