问一上C指针的有关问题
问一下C指针的问题指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区-----------------------
问一下C指针的问题 指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区 -------------------------- 这个“内存区”怎么理解,是指系统还是指编译器 [解决办法]
引用: 我认为不是系统,也不是编译器,而就是一块实实在在的内存,也可以理解成存放指令或者一切物品的带编号的指令 是虚拟地址还是物理地址?应该是虚拟地址吧?当然通过映射之后也是物理地址。
------解决方案--------------------
你所说的内存区:
指的是系统内核将真实的内存映射成的虚拟内存,32位系统就是映射4G个虚拟内存地址,其中有1G个被内核占用。然后就是咱们看到3G个。。你所说的内存区就是指的这3G个内存地址,计算机中所有的操作都在这些地址里存放,无论是指针还是变量,具体可以看一下c语言存储空间布局。虚拟内存地址对应着真实的硬件内存物理地址
[解决办法] LS的那位,我看到啥三极管就不想往下看了。。
所谓内存区,是由编译器决定,OS分配的。。
然后所谓的堆和栈,对编译器、对OS来说木有任何区别。。~~
32位系统的OS可以分配给每个进程4G的内存空间(2的32次就是4G,然后别去管什么核心区用户区的),你所说的内存区就是指这一块内存(当然是虚拟或者逻辑的,不是物理的)。。。
[解决办法] int *p这个指针是静态分配的,在栈里面分配的, p=&a就指向一个内存区,free(p)之后那么指向的内存权限还给了操作系统