【发布时间】:2017-11-12 02:25:44
【问题描述】:
考虑下一段代码
class foo {
public:
void f() {
char buffer[1024];
memset(buffer, NULL, 1024);
read_some_input_to_buffer(buffer, 1024);
}
};
class bar {
public:
void f() {
memset(_myPrivateBuffer, NULL, 1024);
read_some_input_to_buffer(_myPrivateBuffer, 1024);
}
private:
char _myPrivateBuffer[1024];
};
bar::f() 会比foo::f() 工作得更快吗?如我所见,缓冲区已经存在于bar 中,所以调用函数时编译器不会在堆栈上为其分配内存?还是我错了,在调用foo::f() 之前已经分配了内存?
【问题讨论】:
-
在堆栈上分配内存不需要时间。
-
调用函数时,堆栈指针会根据所有局部变量使用的空间量进行调整。所有这一切都是改变它被调整的数量,但它必须在有或没有局部变量的情况下进行调整。
-
这是一个无用的过早优化的经典案例。您是否使用分析器确定内存分配是影响代码性能的瓶颈?如果答案是否,那么你就是在浪费时间,应该继续讨论真正的问题。
-
如果局部变量是一个有构造函数的类对象,那就不一样了,那么它必须调用构造函数和析构函数。但对于 POD,根本没有开销。
-
@KenWhite 我为什么要介绍这个?我宁愿在stackoverflow上问一个更一般的问题,并得到一个真正能教给我的好答案。 “真正的问题”是什么意思?我想更好地了解我的代码是如何运行的
标签: c++ arrays performance function memory