继续昨天的问题:std::priority_queue 预分配内存 内存错误
我正在开展一个确定性实时项目,该项目每次迭代的执行周期为几百微秒。
我面临的问题是,std::queue 和 std::priority_queue 上的推送操作随机花费大量时间。推送操作通常需要大约 5-25 微秒,但随机需要 300 微秒到 5 毫秒。
为了解决这个问题,我决定为 std::queue 和 std::priority_queue 预分配内存。
我指的是以下答案:https://stackoverflow.com/a/79433983/6319901
开发操作系统:Ubuntu 24.04 LTS。
我的目标操作系统:vxWorks 7
语言:C++17
代码:
#include <queue>
#include <array>
#include <vector>
#include <string>
#include <cstdint>
#include <iostream>
#include <functional>
static const std::size_t MAX_PACKET_LENGTH = 512;
struct receive_t
{
int data1;
float data2;
std::string data;
receive_t()
{
data.reserve(MAX_PACKET_LENGTH);
}
};
int main(int argc, char const *argv[])
{
std::cout << "Hello, World!!!\n";
std::vector<receive_t> container;
container.reserve(1000);
std::queue<receive_t,
std::vector<receive_t>> q
(
std::move(container)
);
std::cout << "sizeof(receive_t) : " << sizeof(receive_t) << std::endl;
std::cout << "sizeof(q) : " << sizeof(q) << std::endl;
std::cout << "q.size() : " << q.size() << std::endl;
return 0;
}
输出:
Hello, World!!!
sizeof(receive_t) : 40
sizeof(q) : 24
q.size() : 0
我有两个问题:
- 如何检查分配给队列的总内存?根据我的计算,
sizeof(receive_t)
必须分配 ( + 512) * 1000 字节。MAX_PACKET_LENGTH: 512
- 我可以将回调或挂钩附加到我的内存分配例程吗,这样我就可以检测到我的队列何时请求额外的内存。