考虑下一段代码
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()
之前已经分配了内存?
答案 0 :(得分:1)
如果我将它们存储在类本身中会更快吗?
否即可。
所以编译器不会在堆栈上为它分配内存
在堆栈上分配内存相当于移动堆栈指针。更重要的是,堆栈总是很热,你得到的内存比任何远堆分配的内存更容易在缓存中。阅读Which is faster: Stack allocation or Heap allocation中的更多内容。
PS:小心不要成为过早优化的受害者。