• 内存对齐


    内存对齐

    许多计算机系统对基本类型的合法地址做出了限制,要求某种类型的对象的地址必须是K(通常是2,4,8)的倍数。这被称为内存对齐。
    为什么要有内存对齐?

    1. 提升内存读写性能,比如对于double对象,如果按8字节对齐,那么64位机器一次行就可以完成读写。
    2. 硬件强制要求,一般系统不进行内存对齐也可以正常运行,但有些系统必须要内存对齐才可以运行,比如某系统的SSE指令,必须要16位对齐才可以读写,否则终止程序运行。

    复合类型内存对齐

    对于struct这样的复合类型,其内存对齐值为系统最大对齐值和数据成员最大对齐值取最小,一般在32位系统系统最大对齐值为8,在64位系统最大对齐值为16。

    struct Foo {
        char a;
        short b;
        int c;
    };
    

    上面的类型的内存对齐值alignof(Foo)等于4,在ab之间还有一个字节的填充字符。

    malloc怎么保证内存对齐

    实际上malloc的实现已经考虑了内存对齐,标准保证返回的地址值可以让任何类型满足内存对齐的要求,在C11和C++11中还专门引入了max_align_t这个类型来表示系统最大对齐值:

    int main(int argc, char const *argv[])
    {
        // 输出16
        std::cout << alignof(max_align_t) << std::endl;
        void* p = malloc(1);
        // 输出0xd13010
        std::cout << p << std::endl;
    
        return 0;
    }
    
  • 相关阅读:
    django模板使用
    django视图的定义
    字符串逆序
    Django 中Admin站点的配置
    Django模型Model的定义
    Django安装部署
    Linux常用命令
    深拷贝,浅拷贝
    lambda 表达式 (匿名函数)
    生成器与迭代器
  • 原文地址:https://www.cnblogs.com/HachikoT/p/14136177.html
Copyright © 2020-2023  润新知