c - memcpy/memset 等可以处理的最大缓冲区大小是多少?

标签 c

缓冲区的最大大小是多少 memcpy and other functions可以处理?这个实现依赖吗?这是否受作为参数传入的 size(size_t) 的限制?

最佳答案

这完全取决于实现。

这不仅取决于硬件,还取决于编译器的使用年限。对于拥有相当现代的编译器(意味着任何基于 90 年代初或之后的标准的任何东西)的人来说,大小参数是 size_t。这可以是最大的 16 位无符号、最大的 32 位无符号或最大的 64 位无符号,具体取决于编译器编译到的内存模型。在这种情况下,您只需找出在您的实现中 size_t 的大小。然而,对于非常的旧编译器(即,在 ANSI-C 和 perhaps for some early versions of ANSI C 之前),所有赌注都已关闭。

在标准方面,以 cygwin 和 Solaris 7 为例,大小参数是 size_t。查看我可用的嵌入式系统,大小参数是 unsigned(意思是 16 位无符号)。 (这个嵌入式系统的编译器是在 80 年代编写的。)我找到了一些 ANSI C 的网络引用 where the size parameter is an int .

你可能想看看 this articlesize_t 以及 follow-up article 上关于一些早期 GCC 版本的错误特征,其中 size_t 被错误地签名。

总而言之,对于几乎每个人size_t 将是正确的使用引用。但是,对于少数使用嵌入式系统或使用非常旧的编译器的遗留系统的人,您需要查看您的手册页。

关于c - memcpy/memset 等可以处理的最大缓冲区大小是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/745152/

相关文章:

c++ - 如何为 32 位位图生成单色位掩码

c - minixml undefined reference `mxmlNewXML'

c - 指向数组的指针只打印第一个字符?

c - Doxygen 构造多种语言

c - qsort 一个字符串数组,比较

c++ - 用于 Objective C 的 IDE

c - C中int类型的sqrt()

c++ - 编译为 C++ 但不是 C(错误 : lvalue required as unary '&' operand)

c - C 中最快的去交织操作?

c - 具有不同const限定的指针的结构之间的兼容性