我有一个Stock类,其中的一个成员是一个字符串,最大长度最多为6个字符(纳斯达克的股票代码不能超过5个字符,如果要破产则不能超过添加的Q)。但是,由于仅纳斯达克就有大约3500只股票,因此在制作“股票”对象时,我想使用尽可能少的数据。 std :: string为内容分配的空间超出了我的需要,我正在尝试减少内存消耗。 std :: string使用的额外分配内存是否会完全影响程序的性能?
在下面的代码中,它显示成员变量符号的大小为15,即使其中只有4个字符也是如此。可以在初始化之前使用类内的str.reserve将字符串大小限制为6个字节吗?还是应该实例化该对象,然后调用symbol.resize(6)以确保仅使用6个字节?
#include <iostream>
#include <string>
using namespace std;
class Stock
{
public:
Stock(string s, double o, double c, unsigned int v)
: symbol(s), open(o), close(c), volume(v) {};
~Stock() = default;
string symbol;
double open;
double close;
unsigned int volume;
};
int main() {
Stock AAPL("AAPL", 267.48, 270.71, 26547493);
cout << AAPL.symbol.capacity() << endl;
cout << AAPL.symbol.size() << endl;
return 0;
}
从阅读问题STD::string as a Member Parameter for Dynamically Allocated Objects的答案来看,似乎std :: string使用的额外分配空间完全不会干扰程序的内存,但是我不确定100%,我会希望有人能证实我的假设。
答案 0 :(得分:0)
我认为,最好的方法是类型定义的组合。
使用char ticker[6+1]
,如果需要解析数据或处理数据,则使用std::string_view
。