memcpy和其他函数可以处理的缓冲区的最大大小是多少?这个实现依赖吗?这是否受到作为参数传入的大小(size_t)的限制?
Edd*_*die 11
这完全取决于实现.
这取决于硬件和任何东西,但也取决于编译器的时代.对于任何拥有相当现代编译器的人(意味着任何基于90年代或更晚的标准的东西),size参数是a size_t.这可以合理地是最大的16位无符号,最大的32位无符号或最大的64位无符号,具体取决于编译器编译的内存模型.在这种情况下,您只需要找出实现中的大小size_t.但是,对于非常旧的编译器(即ANSI-C之前,也许是某些早期版本的ANSI C),所有的赌注都是关闭的.
例如,在标准方面,查看cygwin和Solaris 7,size参数是a size_t.看一下我可用的嵌入式系统,size参数是一个unsigned(意思是16位无符号).(这个嵌入式系统的编译器是用80年代编写的.)我找到了一些对参数为a的int ANSI C的Web引用.
您可能希望看到这篇文章上size_t,以及在后续的文章中有关禁止某些早期版本的GCC的误功能size_t被错误地签署.
总之,对于几乎每个人来说,size_t都是正确的参考使用方法.但是,对于那些使用嵌入式系统或旧系统编译器的旧系统的人来说,需要检查手册页.
| 归档时间: |
|
| 查看次数: |
9981 次 |
| 最近记录: |