在64位计算机上,mmap
与mmap64
之间有什么区别吗?
[fstat64
vs fstat
还有其他。
answer:在64位Ubuntu 18 LTS上,验证mmap和mmap64 func addr相同。off_t和off64_t是64位。
fstat / stat可以返回> 2 GiB文件大小。
代码:
#include <sys/mman.h>
#include <sys/stat.h>
#include <iostream>
using namespace std;
int main(){
cout << sizeof(off_t) << endl;
void* a = (void*)&mmap64;
void * b = (void*)&mmap;
cout << (a ==b) << endl; // same addr
a = (void*)&fstat64;
b = (void*)&fstat;
cout << (a==b) << endl; // diff addr but able to return > 2 GiB size
}
mmap64()函数与mmap()函数相同,除了它可用于将大于2 GB的文件中的内存映射到进程内存中。 mmap64()函数是大文件扩展名的一部分。
来自here
在64位计算机上,mmap与mmap64之间有什么区别吗?
无。
* 64接口被引入以在32位系统上启用Large File Support。在64位系统上没有任何区别。
但是,实际上并未直接向用户公开64位接口(不是POSIX的一部分)。因此,您不应直接使用* 64接口。如果您碰巧在32位系统上需要它们,请使用glibc的feature test macros(例如_FILE_OFFSET_BITS
)。
宏:_FILE_OFFSET_BITS
此宏确定应使用哪个文件系统接口,一个替换另一个。 _LARGEFILE64_SOURCE使64位接口可以用作附加接口,而_FILE_OFFSET_BITS允许64位接口替换旧接口。
如果未定义_FILE_OFFSET_BITS,或者将其定义为值32,则没有任何变化。使用32位接口,在32位系统上,类似off_t的类型的大小为32位。
如果宏定义为值64,则大文件接口将替换旧接口。即,这些函数不能以不同的名称使用(如_LARGEFILE64_SOURCE一样)。取而代之的是,旧函数名称现在引用了新函数,例如,对fseeko的调用实际上确实调用了fseeko64。
仅当系统提供了处理大文件的机制时,才应选择此宏。在64位系统上,此宏无效,因为* 64功能与常规功能相同。
此宏是作为大文件支持扩展名(LFS)的一部分引入的。