将二进制数据传递到另一个线程

时间:2018-11-12 18:34:53

标签: c++

我有一个API,它接收二进制数据,并且在内部必须将其推入队列,然后另一个线程从队列中读取并处理数据。

我想避免分配动态内存分配。

我的API就像

bool some_func(unsigned char* data, int length);

我应该使用stringstream作为处理二进制数据的参数吗?

谢谢

1 个答案:

答案 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。该容器正在执行动态内存处理。


不能使用向量或字符串来避免动态内存分配。

现在问自己为什么要避免它,确定要这么做吗?

考虑一下,您可以在开始工作时分配一次缓冲区。