gpt4 book ai didi

c++ - size_t 和 off_t 的用法有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 12:38:20 28 4
gpt4 key购买 nike

除了每种类型可以容纳的值的大小之外,size_toff_t用法方面的主要区别是什么? size_t 类型用于绝对大小而 off_t 类型用于偏移是否只是约定?还是比这更深入?

我正在编写一个包装器类,以便使用 mmap 来写入大文件,我想知道最好的类型用于它们的参数。鉴于我想写入 > 4GB 的文件,我很想对所有内容都使用 size_t,但这是最佳做法吗? (或者我应该为某些功能使用一些 off64_t 类型?)

例如,我的 writeAt 函数是否应该声明为:

MMapWriter::writeAt(off64_t offset, const void* src, size_t size)

MMapWriter::writeAt(size_t offset, const void* src, size_t size)

最佳答案

size_t 用于对象,off_t 用于文件。

mmap 几乎按照定义合并了这两个概念。我个人认为我会使用 size_t,因为不管它是什么,映射文件也是(虚拟)内存中的一个数组。

size_t 是标准 C++,off_t 是 Posix,off64_t 是一个 GNU 扩展,与函数 fopen64ftello64 等。我认为它应该总是与 64 位 GNU 系统上的 off_t 相同的类型,但不要打赌你的公司没有检查。

如果相关,off_t 是有符号的,而 size_t 是无符号的。但是 size_t 的签名对应物是 ptrdiff_t,所以当你需要一个签名类型时,它并不意味着你应该使用 off_t >off64_t.

关于c++ - size_t 和 off_t 的用法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10634629/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com