欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

一些问题的整理

程序员文章站 2022-04-09 22:51:03
...

一 、 使用虚拟地址空间的好处是什么?

  1. 让每个进程拥有了相同的、独立内存空间,相互之间不会干扰
  2. 读写内存更安全。由于系统和MMU的限制,使得进程无法操作到其他进程的数据。
  3. 不连续的物理空间可以映射成连续的虚拟地址空间
  4. 进程分配的内存空间只有在实际使用时,才会触发缺页异常来分配实际物理空间,从而最大程度减少了内存空间的浪费。
    【MMU:Memory Management Unit的缩写,中文名是内存管理单元,它是CPU中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权,多用户多进程操作系统。】

二、 如何设置一个文件重启后删除?

MoveFileEx(szDstFile, NULL, MOVEFILE_DELAY_UNTIL_REBOOT);·

WINBASEAPI
BOOL
WINAPI
MoveFileExA(
    __in     LPCSTR lpExistingFileName,
    __in_opt LPCSTR lpNewFileName,
    __in     DWORD    dwFlags
    );
WINBASEAPI
BOOL
WINAPI
MoveFileExW(
    __in     LPCWSTR lpExistingFileName,
    __in_opt LPCWSTR lpNewFileName,
    __in     DWORD    dwFlags
    );
#ifdef UNICODE
#define MoveFileEx  MoveFileExW
#else
#define MoveFileEx  MoveFileExA
#endif // !UNICODE

dwFlags的值 :

  • MOVEFILE_REPLACE_EXISTING = 0x00000001; // 覆盖已存在的目标文件,如果来源文件和目标文件指定的是一个目录,则不能使用此标记。
  • MOVEFILE_COPY_ALLOWED = 0x00000002; // 如果目标文件被移动到不同的卷上,则函数通过拷贝后删除来源文件的方法来模拟移动文件操作。
  • MOVEFILE_DELAY_UNTIL_REBOOT = 0x00000004; // 在系统重新启动前,不执行移动操作,直到系统启动后,磁盘检测完毕后,创建页面文件之前,执行移动操作。因此,这个参数可以删除系统之前启用的页面文件。这个参数只能被拥有 管理员权限 或 LocalSystem权限 的程序使用。这个参数不能和 MOVEFILE_COPY_ALLOWED 一起使用。
  • MOVEFILE_WRITE_THROUGH = 0x00000008; // 这个标记允许函数在执行完文件移动操作后才返回,否者不等文件移动完毕就直接返回。如果设置了 MOVEFILE_DELAY_UNTIL_REBOOT 标记,则 MOVEFILE_WRITE_THROUGH 标记将被忽略。
  • MOVEFILE_CREATE_HARDLINK = 0x00000010; // 系统保留,以供将来使用

//后续的问题会继续补充