zoukankan      html  css  js  c++  java
  • 内存对齐

    环境

    • 32位操作系统

    通过结构体的内存字节对齐了解操作系统的内存对齐

    • 在32位操作系统中, CPU默认读和写数据是按照4字节的方式
    • 在一个结构体中, 在编译的时候, 编译器会根据结构体中的成员变量使其内存对齐, 让他们都是符合让CPU一次读取的数据而不用再读取一次数据, 减少了读取的次数
    • 下面通过案例讲解
    
    1. 
        struct s {
            char c; // 占用1个字节
            int i; // 占用4个字节
            short s; // 占用2个字节
        }stu;
        如果不对齐的话, 则c与i的前3个字节在同一个4字节内, s和i的后1个字节在另外一个4字节内, 当使用stu.i访问的时候, CPU要读取第一个4字节获取i的前三个字节的数据, 在读取后4个字节获取i的后一个字节的数据, 接受处理数据拿出i的值
        如果对齐的话, 在编译器会自动添加一些无关的变量对数据进行填充, 使得c一个4字节, i一个4字节, s一个4字节, 这样获取stu.i就是一个内存访问了, 该结构体占了12个字节
    
    2. 
        struct s {
            char c;
            short t;
            int i;
            char ch;
        };
        编译器的对齐方式中, c和t是在同一个4字节中的, 因为CPU一次性就可以读取出来一个4字节, CPU在过滤一下就可以取出c的值了, 这样节省了内存
    
  • 相关阅读:
    HDU 1505 & POJ 1964 City Game (递推+扫描法)
    web页面内容优化管理与性能技巧
    POJ2406简单KMP
    poj2418map或者字典树
    poj2418map或者字典树
    POJ2296二分2sat
    POJ2296二分2sat
    poj2186强联通(牛仰慕)
    poj2186强联通(牛仰慕)
    poj2175费用流消圈算法
  • 原文地址:https://www.cnblogs.com/megachen/p/9789095.html
Copyright © 2011-2022 走看看