C 存储指针所占用的内存是否比它存储的字节多';他指的是什么?
我的问题是指针值如何存储在哪里,它们在内存中是否比它们指向的东西占用更多的空间。例如,如果我有一个64位指针,我用它指向内存中的一个信息字节;指针的值存储在哪里?它是否比数据本身占用更多的空间 我的问题的一个例子是用C写的 字符数据=10 char*charPointer=&data 因为指针是64位的,数据是8位的,所以charPointer不比数据占用更多的空间吗 附言:我目前正在努力学习C语言的基础知识 其中存储了指针的值 指针的值存储在您声明要存储的位置;e、 g.如果将指针声明为局部变量,则它将存储在堆栈上;o如果在堆上分配了指针(或者,更常见的是,将指针作为在堆上分配的对象的成员变量包含在内),那么指针将在堆中 它是否比数据本身占用更多的空间 在这种情况下,确实如此 实际上,您可以自己检查一个值占用了多少空间:C 存储指针所占用的内存是否比它存储的字节多';他指的是什么?,c,C,我的问题是指针值如何存储在哪里,它们在内存中是否比它们指向的东西占用更多的空间。例如,如果我有一个64位指针,我用它指向内存中的一个信息字节;指针的值存储在哪里?它是否比数据本身占用更多的空间 我的问题的一个例子是用C写的 字符数据=10 char*charPointer=&data 因为指针是64位的,数据是8位的,所以charPointer不比数据占用更多的空间吗 附言:我目前正在努力学习C语言的基础知识 其中存储了指针的值 指针的值存储在您声明要存储的位置;e、 g.如果将指针声明为局部变
printf("data takes up %zu bytes\n", sizeof(data));
printf("charPointer takes up %zu bytes\n", sizeof(charPointer));
如果您在64位计算机上,您应该会发现指针占用8个字节,正如您所期望的那样
指针指向的字符占用一个字节,但在许多情况下,还会插入一些填充字节,以保持堆栈上下一项的对齐,从而使CPU能够高效访问。在几乎每个C实现中,指向
char
的指针比char
占用更多空间。(C标准允许它们的大小相同,但这样的实现充其量也很少见,更可能是过时的或不存在的。)
尽管如此:
- 您可能需要一个指针来指向所选对象中的一个,或者管理对象,或者以各种方式连接对象
- 指针可以指向比字符大得多的对象
- 指针可以指向数组中许多元素的第一个,因此一个指针可以提供对多个对象的访问
除关于两种语言的差异或相互作用的问题外,请不要标记C和C++。要对两种语言提出相同的问题,请针对每种语言提出一个问题。
sizeof
运算符给出与某个对象使用的内存相关的结果。通常sizeof(char*)
由实现定义,但在实践中通常大于1
(例如,在32位系统上通常为4,在64位系统上通常为8)sizeof(char)
根据定义是1
。例如,4>1
或8>1
不需要太多逻辑运算。问题在于,编译器可能会优化不存在的charPointer
,从而在运行时不使用任何内存,这取决于使用它所做的操作。虽然不常见,但在某些系统上char
大于8位(例如UTF-16)。虽然在实践中,指针不可能小到8位,但所选的本机char
类型可能大到与指针大小相同。