std :: string分配的内存是否会影响性能?

时间:2019-12-09 00:56:45

标签: c++ stdstring

我有一个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%,我会希望有人能证实我的假设。

1 个答案:

答案 0 :(得分:0)

我认为,最好的方法是类型定义的组合。 使用char ticker[6+1],如果需要解析数据或处理数据,则使用std::string_view