首页 > 解决方案 > std::string 分配的内存是否会干扰性能?

问题描述

我有一个 Stock 类,其中一个成员是一个字符串,其最大长度最多为 6 个字符(纳斯达克股票代码不能超过 5 个字符加上添加的 Q,如果它们破产的话)。然而,由于仅纳斯达克就有大约 3500 只股票,我想在制作 Stock 对象时使用尽可能少的数据。std::string 为其内容分配的空间超出了我的需要,我正在尝试减少内存消耗。std::string 使用的额外分配内存会影响我的程序的性能吗?

在下面的代码中,它显示成员变量 symbol 的大小为 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%当然,如果有人可以证实我的假设,我更愿意。

标签: c++stdstring

解决方案


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


推荐阅读