zoukankan      html  css  js  c++  java
  • C语言中关于指针所占空间大小的探讨

    示例程序


    代码如下

    #include <stdio.h>
    int main()
    {
    	 int *na,a=9999999,*nA,A=1,i;//定义两个变量用来控制值比较大和值比较小的时候的内存 
    
     	 float *nb,b=99999999,*nB,B=1;
    
    	 double *nc,c=999999999,*nC,C=1;
    
    	 char *nd,d=65;
    
    	 na=&a,nA=&A,nb=&b,nB=&B,nc=&c,nC=&C,nd=&d;
    
    	 printf("指针na占用%d字节,nA占用%d字节
    ",sizeof(na),sizeof(nA)); 
    	 printf("指针nb占用%d字节,nB占用%d字节
    ",sizeof(nb),sizeof(nB)); 
    	 printf("指针nc占用%d字节,nC占用%d字节
    ",sizeof(nc),sizeof(nC)); 
    	 printf("指针nd占用%d字节
    ",sizeof(nc)); 
    
    	 return 0;
    }
    


    通过以上程序编译运行观察结果:



    不难发现,上述的四种指针 无论是字符型整型还是浮点型他们所占用的内存空间大小都是8字节,但是如果更换了操作系统尝试呢?

    结果也许会让你耳目一新,是的,更换了操作系统之后,结果也会随之变动,通过查找资料以及实践,我发现,不同的操作系统以及不同的编译器等等环境因素都会让指针类型变量占用的空间大小发生变化:

    • 16位的操作系统指针变量会占用2字节内存空间。
    • 32位的操作系统指针变量会占用4字节内存空间。
    • 64位的操作系统指针变量会占用8字节的内存空间。
      因为我使用的是64位的操作环境以及DEV C++编译器进行实验,所以测试结果为占用8字节的内存
      这样的结果也许没有说服性,可能还存在储存内容大小导致占用空间变化的情况,于是在程序上我又进行改进,加入了更大的值去测试,结果依然是8字节,因此我得出结论,在64位的操作环境下,特定的编译环境下,指针变量占用8字节内存空间
  • 相关阅读:
    函数配接器
    函数对象和函数指针
    unary_function 和 binary_function
    堆排序
    Shell排序
    volatile理解
    死锁
    进程间通信
    优化循环的方法-循环展开
    如何学习编译原理
  • 原文地址:https://www.cnblogs.com/hdsmlxl/p/14677157.html
Copyright © 2011-2022 走看看