美文网首页
结构体-所占内存大小

结构体-所占内存大小

作者: bad_boy | 来源:发表于2019-01-03 10:24 被阅读5次

结构体内存的分配,不仅数据类型相关,还和变量声明的顺序相关。
结构体中,每一个变量的占用的大小是确定的,否则是报错。

相关知识1:

cpu传输数据的方式:
cpu每次传输数据大小由它的总线条数决定,32位传输4个字节,64位传输8个字节。
这里以64位系统举例,若声明一个变量大小为8字节,起始地址位1,而cpu读取的地址为0~7,则该变量需要读取两次,显然降低了cpu的性能。
为提高cpu读取的性能,采用补齐的方法提高cpu的效率。即内存为8字节的数据,一定会被一次读取,这当然需要调整变量在内存中的起始地址,使其从0开始。
若一个变量不满足8字节,则进行补齐,保证其后一个变量的地址满足cpu读取的初始地址。
参考:https://blog.csdn.net/qq_18815817/article/details/82788394

相关知识2:

内存对齐的规则:
1.起始地址为该变量类型所占内存的整数倍,若不足则不足部分用数据填充至所占内存的整数倍。
2.该结构体所占总内存为结构体成员变量中最大数据类型的整数倍
参考:https://www.cnblogs.com/kl2blog/p/6908048.html

#include <stdio.h>
#include <string.h>

/*
结构体中占用内存的大小
*/
int main()
{
    printf("hello world!\n"); 
    struct s1
    {
        char a;
        int b;
        float c;
        double d;
    } str1;
    struct s2
    {
        double a;
        int b;
        char c;
        char m;
        double d;
        char e;
    }str2;
    struct s3
    {
        char a;
        double d;
        int b;      
    }str3;
    struct s4
    {
        double d;
        char a;        
        int b;      
    }str4;
    printf("%d\n",sizeof(str1)); 
    printf("%d\n",sizeof(str2)); 
    printf("%d\n",sizeof(str3)); 
    printf("%d\n",sizeof(str4));     
    return 0;
}

相关文章

  • 结构体-所占内存大小

    结构体内存的分配,不仅数据类型相关,还和变量声明的顺序相关。结构体中,每一个变量的占用的大小是确定的,否则是报错。...

  • 7.C语言 结构体

    结构体所占存储空间必须是最大成员所占字节数的倍数 指向结构体的指针 利用指针访问结构体的成员 (*p).成员名称 ...

  • 带你深入理解iOS-内存对齐

    前言 在iOS底层源码学习中,会需要分析一个结构体所占用的内存大小,这里面就涉及到了内存对齐 今天,我将结合内存对...

  • 结构体对齐?

    0 记得计组考试时候遇到过一道题, 计算结构体所占的内存大小, 当时错了, 但是后来也没明白是为什么而错。 今日转...

  • 2018-07-13

    Object-c对象本质上就是一个结构体 NSObject所占内存的大小就是结构体指针所占的大小, 64bit 从...

  • 结构体例题1

    计算结构体变量所占的存储单元

  • 嵌入式学习笔记19.11.26

    c语言结构体: //结构体能以一整组数据赋值给另一组 //结构体所占数据大小必定是4的倍数 //每行所占字节4个,...

  • 结构体 - 内存大小

  • 数组,切片

    值传递:数组,结构体指针(地址)传递:切片,结构体方法 数组 1.元素交换 切片 内存扩容,在内存大小小于1024...

  • iOS原理探索02-- 内存对齐

    结构体内存对齐 我们首先定义两个结构体,分别计算他们的内存大小,并讨论内存对齐原理 从两个结构体来看两者没啥大的区...

网友评论

      本文标题:结构体-所占内存大小

      本文链接:https://www.haomeiwen.com/subject/rjzxrqtx.html