我只是试图优化一些通信堆栈。我正在使用 Qt 5.3.2 / VS2013。
堆栈使用 QByteArray 作为数据缓冲区。我打算使用capacity()
和reserve()
方法在数据大小增长时减少不必要的内部缓冲区重新分配。然而,QByteArray 的行为被证明是不一致的。保留的空间有时似乎被隐式挤压。
我可以提取以下演示应用字符串追加、字符串分配和字符追加到三个缓冲区。这些单个操作似乎保留了内部缓冲区大小(使用 获得capacity()
)。但是,当将这三个操作中的每一个应用于相同的 QByteArray 时,保留的大小会发生变化。这种行为在我看来是随机的:
QByteArray x1; x1.reserve(1000);
x1.append("test");
qDebug() << "x1" << x1.capacity() << x1;
QByteArray x2; x2.reserve(1000);
x2 = "test";
qDebug() << "x2" << x2.capacity() << x2;
QByteArray x3; x3.reserve(1000);
x3.append('t');
qDebug() << "x3" << x3.capacity() << x3;
QByteArray x4; x4.reserve(1000);
x4.append("test");
x4.append('t');
x4 = "test";
qDebug() << "x4" << x4.capacity() << x4;
预期的输出将是:
x1 1000 "test"
x2 1000 "test"
x3 1000 "t"
x4 1000 "test"
但实际输出是:
x1 1000 "test"
x2 1000 "test"
x3 1000 "t"
x4 4 "test"
有人对这种奇怪的行为有解释吗?
更新:看起来clear()
也放弃了预订。