C语言基础:指针内存占用与存储位置的技术疑问
关于C语言指针内存占用与存储位置的解答
嘿,很高兴帮你理清这个C语言基础里的常见疑问!咱们一个个来拆解你的问题:
1. 存储指针是否比它指向的字节占用更多内存?
答案是完全有可能,而且在64位系统里这是很普遍的情况。
指针的内存大小只由你的系统架构决定:
- 32位系统中,指针通常占4字节(32位)
- 64位系统中,指针通常占8字节(64位)
而它指向的数据的大小,是由数据的类型决定的——比如char类型占1字节,int通常占4字节,double占8字节。所以当指针指向一个比自身尺寸小的数据类型时(比如你例子里的64位指针指向char),指针确实会占用更多内存空间。
2. 指针的值存储在何处?它是否比指向的内容占用更多空间?
指针本身就是一个变量,所以它的存储位置和普通变量一样:
- 如果是函数里的局部指针,会存在栈内存中
- 如果是用
malloc等方式动态分配的指针变量,会存在堆内存中 - 如果是全局/静态指针,会存在全局/静态存储区
拿你给出的代码示例来说:
char data = 10; char* charPointer = &data;
这里data是局部char变量,存在栈上;charPointer同样是局部变量,也存在栈上,它存储的是data的内存地址(64位系统下是8字节的数值)。
在64位系统中,charPointer占用8字节,而data只占用1字节——所以确实指针比它指向的数据占用了更多空间。这是完全正常的,因为指针的核心作用是记录内存地址,地址的长度由系统架构决定,和它指向的数据的大小没有关系。
另外补充个小知识点:不管指针指向什么类型,它的大小都是固定的(由系统架构决定)。比如char*、int*、double*在64位系统上都是8字节,不会因为指向的类型大小不同而变化。
内容的提问来源于stack exchange,提问作者John Issa
相关产品推荐
相关产品推荐

