gpt4 book ai didi

C 可以处理子字节指令寻址吗?

转载 作者:行者123 更新时间:2023-11-30 14:31:35 25 4
gpt4 key购买 nike

例如,如果架构支持半字节长度指令,但数据是字节对齐的,则:

void *PointerToAnything;

工作?换句话说,编译器可以处理这个吗?

最佳答案

在 C 中,不可能访问小于 8 位的数据元素,因为最小的可能类型是 char,它具有 CHAR_BIT 位,即 8至少。位域是一个异常(exception),但不允许指向其成员的指针; C 中不能存在亚 (8) 字节精度的数据指针。

但是,指令(以及函数)可能以不同的方式存储,并且函数指针可以具有亚字节精度。一般来说,函数指针和数据指针是不可互换的,因此您不能(正确地)将这样的函数指针存储在 void* 指针中。 C 无论如何都不支持访问机器代码,因此不支持访问具有子字节对齐和/或大小的指令。

即使在至少具有字节指令大小和对齐的平台上,函数指针和数据指针也可能无法互换,因为函数指针可能大于或小于数据指针(想象一个具有 256 RAM 字节用于数据和 64kB 的系统)程序存储器的闪存字节)。因此,C 不保证 void* 可以指向所有内容。然而,某些平台(例如 POSIX)明确允许这样做,例如允许dlsym() 工作。

关于C 可以处理子字节指令寻址吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60223278/

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