zoukankan      html  css  js  c++  java
  • C语言面试题——联合体测cpu的大小端

    #include <stdio.h>
    int checkCPU();
    
    int main()
    {
    	int a=1;
    	char * p=(char*)&a;
    	if(*p==1)
    		printf("Little edian\n");
    	else
    		printf("Big edian\n");
    	
    	int ret = checkCPU();
    	printf("%d\n", ret);
    		return 0;
    }
    
    int checkCPU() 
    { 
        union w 
        {   
            int  a; 
            char b; 
        }c; 
    
        c.a = 1; 
        return (c.b == 1); 
    }
    

    上面的一个就是用来测试cpu的大小端的函数,首先联合的概念要弄清楚,可以保存不同类型和长度的变量,编译器负责跟踪对象的长度和对齐要求,并且是在单块存储器中管理不同类型的数据的。上面的联合w在内存的分布如下:

    这个不管是在大端还是小端都是这么存储的,接下来就是数据的存放了,还记得“小高高,小弟弟(低低)”吗?c.a=1;编译器就把1写入联合体c中的a,于是在0x22ff44~0x22ff47的地址里写着:

    c.b:


    在gdb的调试里看到:


    一目了然了吧!~

  • 相关阅读:
    mfc中的_T
    zmq的send
    c++内存相关函数
    如何运行linux shell程序
    Dockfile中的命令如何在.sh中执行
    Linux 错误: $' ': command not found
    实战ZeroMQ的PUSH/PULL推拉模式
    Servlet笔记
    进程控制块(PCB)
    Makefile规则介绍
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12007687.html
Copyright © 2011-2022 走看看