And*_*rei 0 c++ malloc winapi memory-management stl
如果我需要一个二进制缓冲区对象,
比如用于TCP/UDP通信的对象,
那么我将在c ++中使用什么?
vector<unsigned char> ?
std::string? - std :: string可以容纳0字节,与普遍看法相反,所以它可以用来保存二进制数据
new char[] ?
malloc() ?
有没有人看到用于二进制缓冲区的std :: vector?
我没看到.为什么?表现?
我确实看到malloc()经常用于二进制缓冲区.
在C++中.任何人都可以确认吗?解释一下?
谢谢
二进制缓冲区可以看作是您为存储一些非结构化信息而保留的一块内存.从这个意义上讲,使用new char[]和malloc完全等效的IMO,因为它们会给你一块内存和一个指向它的指针.
使用std::vector是另一回事; 除了费用之外,我不认为这是相关的,因为你会使用
&vect[0]
Run Code Online (Sandbox Code Playgroud)
像你一样访问底层缓冲区malloc,它有其优点,如缓冲区可扩展性和比直指针更多的访问安全性; 你可以在这里阅读讨论.我自己在项目中使用过它们.
std::string原则上,C++(98,03)标准的问题不能保证底层缓冲区的连续性,但这似乎不是编译器实现的问题.C++ 0x似乎有标准化的缓冲区连续性(但我没有具体搜索过).所以你也可以使用它们,但是在Herb Sutter的评论之前阅读(它不在主要文章正文中,而是在结尾处发布的第三条评论中).
无论如何,在std::string和之间std::vector,我会选择std::vector.
| 归档时间: |
|
| 查看次数: |
348 次 |
| 最近记录: |