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