有没有办法打印存储变量的所有内存地址?
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));
}
}
我想知道是否有一种方法可以打印出存储了一个 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));
}
}