【发布时间】:2019-02-20 21:58:48
【问题描述】:
可以理解,遍历缓冲区会出错(或造成溢出),但是如果 12 字节缓冲区中使用的字节数少于 12 会发生什么情况?有可能还是空尾总是用0填充?可能有帮助的正交问题:当缓冲区被实例化但尚未被应用程序使用时,缓冲区中包含什么?
我在 Visual Studio 中查看了一些宠物程序,似乎它们都附加了 0(或空字符),但我不确定这是否是可能因语言/编译器而异的 MS 实现。
【问题讨论】:
-
memset可用于确保缓冲区初始化为零。 -
@TruBlu:或者在 C++ 中,
std::fill。 -
@TruBlu 不要那样做,我见过很多人做 malloc 后跟 memset,或 char foo[X] 后跟 memset,没有充分的理由。如果您希望它们零初始化,请使用 calloc() 而不是 malloc(),或者使用
char foo[x]={0};,它将被零初始化。 -
定义“缓冲区”。一般来说,12 字节数组不是我称之为 12 字节缓冲区的数据结构。
-
@hanshenrik 很高兴知道。感谢您提供优化的替代方案。
malloc()比calloc()更有效,因此它是分配内存的首选方法除非需要零初始化。
标签: c++ c memory-management buffer