【发布时间】:2020-04-11 22:29:09
【问题描述】:
为什么我的 MacBook Pro 2015 型号酷睿 i5 的内存有时为 4.5 字节,有时为 6 字节?
我在 C 中运行了这段代码。
#include <stdio.h>
#include <string.h>
int main(){
char ch[] = "Hello World!";
char *p1 = "Hello World!";
printf("%p %s\n", &ch , ch);
printf("size of = %lu bytes\n", sizeof(&ch));
printf("%p %s\n", p1, p1);
printf("size of = %lu bytes\n", sizeof(p1));
return 0;
}
我的终端输出是
0x7ffee8f54a2b Hello World!
size of = 8 bytes
0x106cabf88 Hello World!
size of = 8 bytes
为什么我在第一种情况下得到一个 6 字节的内存地址,而在第二种情况下得到 4.5 个字节的内存地址?
【问题讨论】:
-
在前面加上三个
0s,得到一个6字节的地址。 -
所有前导零都被删除。尝试使用 %p 的 %X 状态。
-
ch位于栈上,p1指向的字符串在文本部分。他们在记忆中相距甚远。 -
如果您想知道指针的大小,请使用
sizeof。 -
@DevO
%X用于int。%p用于void *。建议一个不匹配的说明符会导致麻烦。
标签: c memory memory-management