有没有办法打印存储变量的所有内存地址?

Is there a way to print all memory addresses a variable is stored in?

我想知道是否有一种方法可以打印出存储了一个 int 变量的所有内存位置。 示例:

#include <stdio.h>

int main()
{
        int x = 5;
        int *y = &x;
        printf("%p", (void*)y);
}

示例输出:0x100000000001

这将显示存储 x 的第一个字节的内存地址,但我想查看存储它的每个字节的内存地址。 有什么办法吗?或者我只是假设以下内存位置值是连续的? 即此 int 的其他内存位置为:

0x100000000002?

0x100000000003?

0x100000000004?

如果知道编译时的变量类型,可以用sizeof确定变量内存大小(以字节为单位),然后假设地址范围从(char*)&var(char*)&var + sizeof(var) - 1.
如果变量作为分配的内存接收,您最好使用 <malloc.h> 中的 malloc_usable_size 以获得变量大小,然后找到地址范围。

请注意,通常操作系统会为进程分配虚拟内存。

a way to print all the memory locations that say an int variable is stored in.

当然可以。形成一个循环 [0...sizeof(int)).

int main() {
  int x = 5;
  void *y = &x;
  for (size_t i = 0; i < sizeof x; i++) { 
    printf("%p\n", (void*)((char *)y + i));
  }
}