为指针*变量分配了多少内存?



问题:

  • int
  • float
  • char
  • str

这些var类型都有一个为它们分配的标准化字节分配。但是对于指针,我从来没有学过这个:

这些"address"存储变量,其内容似乎只是一系列字母数字字符。

c++代码:

int *ptr1;
char *ptr2;
void *ptr3;
那么上面列出的指针的标准内存分配是多少呢?一般来说呢?

指针的大小为sizeof(ptr1)字节,这是所有标准指定的。理论上,不同的对象指针可以有不同的大小,不同的函数指针也可以有不同的大小。

归根结底,我们通常指的是32位CPU的数据大小(它在一条指令中可以处理的最大块)并不一定对应于地址总线宽度/可寻址内存空间。后者决定指针的大小。

在实践中(简化):

  • 8位和16位微控制器系统,以及旧的16位PC可能具有不同的指针大小,通常在8到32位之间,其中16位最常见。它们通常使用非标准关键字,如指针限定符nearfar来表示这一点。

    一些ISA可能有一个"零页",这意味着指向前256个地址的8位指针,在那里它们可以更快地执行代码/访问数据(通常这将在冯·诺伊曼mcu上)。类似地,它们可以具有超出正常65536字节的扩展内存,这可能会降低执行/数据访问速度。24位指针并不少见。

  • 32位系统通常有32位指针。

  • 64位系统通常有64位指针。

如果出于某种原因需要获取绝对地址,那么uintptr_t是可移植整数类型,它应该足够大,可以容纳给定系统上的任何指针地址。

相关内容

  • 没有找到相关文章