• C语言硬件知识(基础篇十三)


      。。。

      计算机常用部件

        CPU主板内存硬盘显卡、声卡、机箱、电源、显示器键盘、鼠标、音箱、摄像头、打印机。

                   

        下面简单说明一下带下划线的设备:

          CPU:控制主板上各部件之间的工作,做加减乘除运算,存储运算结果。

          主板:各部件通过它来交换数据

          内存:临时存储数据,速度快,断电数据丢失,容量小,Windows XP时代约4G,C语言变量操作专用。

          硬盘:永久存储数据,速度慢,断电数据不丢失,容量大,Windows XP时代达到1T,C语言文件操作专用。

          显卡:掌管显示屏上显示的文字、图形、颜色、分辨率等等。

      程序执行流程

          int a,b,c;

          scanf(“%d%d”,&a,&b);

          c=a+b;

          printf(“%d\n”,c);

          int a,b,c;  

            CPU控制在内存中分配a、b、c这3个变量空间    

     

          scanf(“%d%d”,&a,&b);   

            CPU控制从键盘读入数据到内存   

     

          c=a+b;   

            CPU从内存a、b取出数据,在CPU内部将a、b相加后放回内存c  

     

          printf(“%d\n”,c);   

            CPU控制内存c中数据送至显卡,显卡控制显示器如何显示。

      地址

        电脑管理内存的方式是给每个存储单元编号(地址),在32位系统中可以编232=4G个号,所以32位系统最大只能装4G内存。

        如果是64位系统,理论上可安装264≈0.18*1020内存,相当于无限。

      内存计算

        ※前面我们学习了一个int型变量占4字节内存,那一个整型数组呢?

        同理,5个元素的double类型数组呢?

        程序1

          数组与内存关系

    // 13-1数组与内存的关系
    #include <stdio.h>
    
    main()
    {
        int a[3];
        int b[] = {1,2,3,4};
        double c[5];
        float d[2];
    
    
        printf("%d,%d,%d,%d\n", sizeof(a), sizeof(b), sizeof(c), sizeof(d));  //查询数组内存占用的字节
    
        printf("%d\n", sizeof(int), sizeof(double));     //也可以用 sizeof 函数直接查看类型所占的内存
    
    }

        ※下面这个是我们熟悉的一个结构。你认为它会占用多少内存?

          struct student

          {

            char name[20]; /*姓名*/

            char sex[3]; /*性别*/

            int age; /*年龄*/

          };

      

        程序2

          结构与内存关系

          注意:结构的内存计算与#pragma pack(1)这句话息息相关。

    // 13-2结构体与内存的关系
    //
    
    #include <stdio.h>
    #pragma pack(1)        //字节对齐,若不写此命令输出的内存值不正确
    main()
    {
        struct student
        {
            char name[20];  //姓名
            char sex[3];    //性别
            int age;       //年龄
        };
    
    
        printf("%d\n", sizeof(struct student));
    }

        程序3

          联合与内存关系

    // 13-3联合与内存的关系
    //
    
    #include <stdio.h>
    #pragma pack(1)       //字节对齐
    
    union student
    {
        char name[20];   //姓名
        char sex[3];     //性别
        int age;
    };
    
    
    int main()
    {
        printf("%d\n",sizeof(union student));     //联合是属于单选,只选择最大的内存
    } 
  • 相关阅读:
    HDU 5451 Best Solver(fibonacci)
    BestCoder Round #56 1002 Clarke and problem 1003 Clarke and puzzle (dp,二维bit或线段树)
    HDU
    Codeforces Round #320 (Div. 1) [Bayan Thanks-Round] C A Weakness and Poorness (三分)
    Codeforces Round #320 (Div. 1) [Bayan Thanks-Round] B "Or" Game (贪心)
    Codeforces Round #320 (Div. 1) [Bayan Thanks-Round] A A Problem about Polyline(数学)
    ZOJ 1729 Hidden Password (字符串最小表示)
    UVA 11627 Slalom(二分)
    UVALive 4254 Processor(二分)
    UVA 10905 Children's Game (贪心)
  • 原文地址:https://www.cnblogs.com/httpcc/p/15394382.html
Copyright © 2020-2023  润新知