python move函数参数含义_Python,为什么mmap.move()会填满内存?

这似乎应该有效.我确实在mmapmodule.c源代码#ifdef MS_WINDOWS中找到了一个可疑位.具体来说,在完成解析参数的所有设置之后,代码会执行以下操作:

if (fileno != -1 && fileno != 0) {

/* Ensure that fileno is within the CRT's valid range */

if (_PyVerify_fd(fileno) == 0) {

PyErr_SetFromErrno(PyExc_OSError);

return NULL;

}

fh = (HANDLE)_get_osfhandle(fileno);

if (fh==(HANDLE)-1) {

PyErr_SetFromErrno(PyExc_OSError);

return NULL;

}

/* Win9x appears to need us seeked to zero */

lseek(fileno, 0, SEEK_SET);

}

它将您的基础文件对象的偏移量从“文件结束”移动到“文件开头”,然后将其保留在那里.这似乎不应该破坏任何东西,但是在调用mmap.mmap映射文件之前,可能值得自己寻找文件的开始.

(下面的所有内容都是错误的,但是因为有评论而留下来.)

通常,在使用mmap()之后,必须使用munmap()来撤消映射.简单地关闭文件描述符无效. Linux documentation明确地称之为:

munmap()

The munmap() system call deletes the mappings for the specified address range, and causes further references to addresses within the range to generate invalid memory references. The region is also automatically unmapped when the process is terminated. On the other hand, closing the file descriptor does not unmap the region.

(BSD文档类似.Windows在这里可能与类Unix系统的行为不同,但你所看到的表明它们的工作方式相同.)

不幸的是,Python的mmap模块不绑定munmap系统调用(也不是mprotect),至少从2.7.11和3.4.4开始.作为解决方法,您可以使用ctypes模块.有关示例,请参阅this question(它调用reboot,但相同的技术适用于所有C库函数).或者,对于更好的方法,您可以在cython中编写包装器.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值