Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将二进制数据传递给另一个线程_C++ - Fatal编程技术网

C++ 将二进制数据传递给另一个线程

C++ 将二进制数据传递给另一个线程,c++,C++,我有一个获取二进制数据的API,它必须在内部将二进制数据推送到队列中,另一个线程从队列中读取并处理数据 我希望避免分配动态内存分配 我的API就像 bool some_func(unsigned char* data, int length); 我应该使用stringstream作为参数来处理二进制数据吗 多谢各位 我希望避免分配动态内存分配 我应该使用stringstream作为参数来处理二进制数据吗 我想你会对大多数std容器感到失望,尤其是stringstream 例如,在Lubunt

我有一个获取二进制数据的API,它必须在内部将二进制数据推送到队列中,另一个线程从队列中读取并处理数据

我希望避免分配动态内存分配

我的API就像

bool some_func(unsigned char* data, int length);
我应该使用
stringstream
作为参数来处理二进制数据吗

多谢各位

我希望避免分配动态内存分配

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

我想你会对大多数std容器感到失望,尤其是stringstream


例如,在Lubuntu 18.04(64位)上,std::stringstream使用std::string作为其缓冲区

sizeof(std::string),带有数据报告32字节

其中包含1000000个字符的sizeof(std::string)报告32个字节,而s.size()报告1000000个字节

(这些是我在2004年4月18日调查的实施细节。)

更清楚的是:std::string(在stringstream中)中的1M字符被分配给动态内存。容器对象只是为您执行动态内存分配和处理


vector还使用动态内存。sizeof(std::vector)报告24个字节。对于包含1000个元素的“std::vector v;”,sizeof(v)为24,v.size()为1000。容器正在执行动态内存处理


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

现在问问你自己,为什么你想避免它,你确定你需要这样做吗


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

阅读一些内容,然后将这些知识应用到您的C++11线程中,如果您使用这些内容,可能a
std::vector
似乎更合适。在任何情况下,您都必须使用动态内存分配(但不是每次将数据放入队列时,即只调用一次new)。检查我关心的是传递的数据的生存期。因为另一个线程可能不知道地址是否仍引用有效数据。我可以使用共享的\u ptr作为API参数吗?如果,通过“我希望避免动态内存分配”您的意思是希望避免写入新的缓冲区和删除缓冲区…那么是的…stringstream或simply string将代表您处理容易出错的活动,并将简化您的工作。std::ostringstream继承自basic_ostream,因此具有二进制写入方法。等等。您可以对stringstream执行二进制输入/输出。