什么更快:在栈上还是在堆上分配内存?深入探讨C++中的性能问题
大家好!我最近开始学习C++,遇到了一个让我非常困惑的问题。我读到栈上的内存分配是“瞬间”完成的,而堆上的分配则很慢。但这对于实际程序来说有多关键呢?
我写了一个小测试来比较速度。用两种方式创建一个包含1000个整数的数组:
```cpp
#include
#include
void testStack() {
for (int i = 0; i < 1000000; ++i) {
int arr[1000]; // 在栈上
arr[0] = i;
}
}
void testHeap() {
for (int i = 0; i < 1000000; ++i) {
int* arr = new int[1000]; // 在堆上
arr[0] = i;
delete[] arr;
}
}
int main() {
auto start = std::chrono::high_resolution_clock::now();
testStack();
auto end = std::chrono::high_resolution_clock::now();
std::cout << "Stack: " << std::chrono::duration_cast(end - start).count() << "ms\n";
start = std::chrono::high_resolution_clock::now();
testHeap();
auto end2 = std::chrono::high_resolution_clock::now();
std::cout << "Heap: " << std::chrono::duration_cast(end2 - start).count() << "ms\n";
return 0;
}
```