我有一个API,它接收二进制数据,并且在内部必须将其推入队列,然后另一个线程从队列中读取并处理数据。
我想避免分配动态内存分配。
我的API就像
bool some_func(unsigned char* data, int length);
我应该使用stringstream
作为处理二进制数据的参数吗?
谢谢
答案 0 :(得分:1)
我想避免分配动态内存分配
我应该使用stringstream作为参数来处理二进制数据吗?
我认为您会对大多数std容器(尤其是stringstream)感到失望。
例如,在Lubuntu 18.04(64位)上,std :: stringstream使用std :: string作为其缓冲区。
带有否数据的sizeof(std :: string)报告32个字节。
sizeof(std :: string)中包含 1,000,000 个字符,报告32个字节,而s.size()报告1,000,000。
(这些是我在18.04上调查过的实现细节。)
更清楚:std :: string(在stringstream中)中的1M个字符分配给动态内存。容器对象只是为您执行动态内存分配和处理。
std :: vector也使用动态内存。 sizeof(std :: vector)报告24个字节。对于“ std :: vector v;”包含1000个元素,sizeof(v)为24,v.size()为1000。该容器正在执行动态内存处理。
不能使用向量或字符串来避免动态内存分配。
现在问自己为什么要避免它,确定要这么做吗?
考虑一下,您可以在开始工作时分配一次缓冲区。