我是靠谱客的博主 文静月亮,最近开发中收集的这篇文章主要介绍边界对齐、大端模式和小端模式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

问题:在内存的分配上,那个占用的内存更少呢?

第一种24B 第二种16B
相信看完这篇文章,你就能清楚的明白了

简单来说,数据的存储尽量在同一个存储空间,不能分家,并且要使末端对齐

法则:莫类型数据边界对齐存储的起始地址是该数据类型字长的整数倍

即如果是双子长(16bit)那么边界对齐的起始地址的末3位必须是000

这就保证了添加该数据进去以后依然是存储是整数倍

所以我解释一下s1的内存大小为什么是24呢

即在添加该元素的时候,要考虑到元素的起始位置是不是元素大小的整数倍,由此发现结构体占三行,每行是8个字节(64位操作系统的默认),一共24字节

复制粘贴 查看结果

#include <iostream>
#include <stdio.h>
using namespace std;
struct test1
{
    int a;
    char b;
    double c;
    short d;
} s1;
int main()
{
    cout << sizeof(s1) << endl;
    return 0;
}

接下来 将一下大端模式和小端模式

大端模式 数据高位地址在低位地址 (数据是个十百千万 地址从高位到低位置)

数据高位对应的地址 就是字开始的地址

小端模式 如图,正好相反 小端模式对于计算机来说更好

通过以下代码,判断本机是大端还是小端模式

#include <stdio.h>
union utest
{
    int a;
    char b;
} u;
int main()
{
    u.a = 0x12345678;
    if (u.b == 0x12)
    {
        printf("大端模式");
    }
    else
    {
        printf("小端模式");
    }
    return 0;
}

 

 

最后

以上就是文静月亮为你收集整理的边界对齐、大端模式和小端模式的全部内容,希望文章能够帮你解决边界对齐、大端模式和小端模式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部