mmap与mmap64之间有什么区别吗?

问题描述 投票:1回答:2

在64位计算机上,mmapmmap64之间有什么区别吗?

[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
 }
c linux linux-kernel system-calls mmap
2个回答
0
投票

mmap64()函数与mmap()函数相同,除了它可用于将大于2 GB的文件中的内存映射到进程内存中。 mmap64()函数是大文件扩展名的一部分。

来自here


0
投票

在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)的一部分引入的。

© www.soinside.com 2019 - 2024. All rights reserved.