【发布时间】:2017-05-30 12:00:31
【问题描述】:
我正在尝试调用 BootServices->GetMemoryMap() 函数,但函数定义和文档对我来说没有意义。 UEFI规范(v2.6)说函数的定义是(第207页):
typedef EFI_STATUS(EFIAPI *EFI_GET_MEMORY_MAP)(IN OUT UINTN *MemoryMapSize, IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap, OUT UINTN *MapKey, OUT UINTN *DescriptorSize, OUT UINT32 *DescriptorVersion);
但是参数部分说:
MemoryMap:指向缓冲区的指针,固件在该缓冲区中放置当前 内存映射。地图是一个数组 EFI_MEMORY_DESCRIPTORs。
如果内存映射是EFI_MEMORY_DESCRIPTORs的数组,并且参数应该是指向缓冲区的指针,那么参数的类型怎么可能是IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap,不应该是IN OUT EFI_MEMORY_DESCRIPTOR **MemoryMap吗?
【问题讨论】:
-
它说“指向固件放置当前内存映射的缓冲区的指针。”可以说,数组是指向缓冲区的指针。也许这样解释,
A pointer to the buffer (first memory address of the buffer) in which ...**MemoryMap将是另一个地址的地址,它是缓冲区的开始。所以它是一个指向指针的指针。 -
要看作者对buffer这个词的意思。在功能上,它是一个地址,但通常来说,它是构成缓冲区的整个地址区域。在后面似乎没有矛盾,因此要么有错误,要么上下文表明它没有引用缓冲区的确切功能定义。
-
@marshalcraft:谢谢,我明白了。他们这样做似乎有点奇怪。