gpt4 book ai didi

c - mmap 和 VirtualAlloc 是否符合 C 标准?

转载 作者:太空宇宙 更新时间:2023-11-04 04:23:57 25 4
gpt4 key购买 nike

据我所知,在 C 中获得有效的可取消引用指针的唯一方法是使用 mallocalloc 函数类,并获取全局、静态或局部变量的地址.

现在,假设我们坚持使用特定平台和目标 - X86_64 上的 Windows。指针类型在内部是一个 64 位无符号整数,CRT 提供了一个名为 VirtualAlloc 的库函数,它允许用户将页面映射到虚拟地址空间。

从标准 C 的角度来看,这是“好的”还是未定义的行为?因为使用这些函数的简单程序似乎会取消引用并非来自 malloc(或其他提到的有效来源)的指针。

还有一个 unsigned long long 被转换为 void* 的问题或者标准中有一些规定允许特定于平台的功能具有特殊含义?

这可能很迂腐,但我很困惑。

最佳答案

使用 C 标准中未定义的 任何 库函数会引发未定义的行为——这几乎是同义反复。此类函数的行为未由标准定义,因此它必须未定义。

但是,该实现可以完全自由地定义任何特定 UB 实例的行为。例如,“针对”Windows 的实现将定义一个库函数 VirtualAlloc,它像 malloc 一样分配内存,并返回指向该内存的有效指针。程序完全可以自由地依赖特定实现的定义。按照标准的说法,此类程序符合但不是严格符合

(定义 VirtualAlloc 以重新格式化硬盘驱动器的假设实现仍然是 C 的一致实现。Windows 程序不应在这样的实现上运行,但相反,使用VirtualAlloc 重新格式化硬盘的预期不应在 Windows 上运行。)

关于c - mmap 和 VirtualAlloc 是否符合 C 标准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43456469/

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