我正在编写一个需要在运行时创建数组的函数。该数组将很小,因此我不担心不安全的代码,但是,我想编写“正确”的代码。因此,我正在考虑三种选择:
- 字符数组[len];
- 字符数组 = 新字符(长度);
- 标准::向量数组(len);
使用Compiler Explorer将它们与 -O3 进行比较。结果是这样的:
- 12 条指令,0 次调用 new
- 21 条指令,1 次调用 new
- 118 条指令,2 次以上新的调用
我是否缺少对 std::vector<> 的优化,或者“正确”的 c++ 方式是否较慢,或者我完全错过了一种编码方式?
编辑:我忘了删除堆分配的数组
测试代码:
代码1:
#include <string.h>
void populate_array(char* arr);
int compute_result(char* arr);
int str_to_arr(const char* str)
{
auto len = strlen(str);
char array[len];
populate_array(array);
return compute_result(array);
}
代码2:
#include <string.h>
void populate_array(char* arr);
int compute_result(char* arr);
int str_to_arr(const char* str)
{
auto len = strlen(str);
char* array = new char[len];
populate_array(array);
auto result = compute_result(array);
delete[] array;
return result;
}
代码 3:
#include <string.h>
#include <vector>
void populate_array(std::vector<char> arr);
int compute_result(std::vector<char> arr);
int str_to_arr(const char* str)
{
auto len = strlen(str);
std::vector<char> array(len);
populate_array(array);
return compute_result(array);
}