结构体所占存储空间

原则一:结构体中元素是按照定义顺序一个一个放到内存中去的,但并不是紧密排列的。从结构体存储的首地址开始,每一个元素放置到内存中时,它都会认为内存是以它自己的大小来划分的,因此元素放置的位置一定会在自己宽度的整数倍上开始(以结构体变量首地址为0计算)。

原则二:在经过第一原则分析后,检查计算出的存储单元是否为所有元素中最宽的元素的长度的整数倍,是,则结束;若不是,则补齐为它的整数倍。最后的元素也要按照最大元素字节数补齐。

原则三:如果是含有结构体的结构体,则是结构体里结构体成员的方式对齐,不是按照结构体大小对齐。

补:在GCC中,要求是最大变量大小的整数倍,但是不超过4字节的倍数,但是VC中,是按照实际大小倍数。

结构体所占存储空间,布布扣,bubuko.com

时间: 2024-11-10 01:37:16

结构体所占存储空间的相关文章

结构体所占内存大小

结构体所占内存大小划分原则: 1.划分字节,按照当前结构体中,字节数最大的类型作为划分单元.[这里面还有一些前提.下面的例子会详细说到] 2.以矩形块儿的形式划分. #include <stdio.h> /**划分示意图: 最小单元是 double所以 这个 地方按照8个字节作为最小单元来划分. */ struct student1 { double avgMark; int ID; }; /**划分示意图: 最小单元不能是数组这个地方的最小单元是 1个字节 */ struct student

C语言结构体所占内存大小

用一道面试题题引入struct str1    {         char   a;         int    b;         float  c;     double d;  };char类型占用1个字节,int型占用4个字节,short类型占用2个字节,float占4字节,double占8字节:那么我们可能会犯一个错误就是直接1+4+2=7,认为该结构体占用7个字节.这是错的.百度一了下发现这是因为计算机中存在一种叫做内存对齐的机制导致了该结果的发生. 在计算机中通常会让CPU从

结构体所占字节大小计算以及共用体大小计算

#include<stdio.h> struct student{ int num; char sex; float score; } ; union data{ int k; char ch; float f; }; int main(void){ printf("%d\n",sizeof(struct student)); printf("%d",sizeof(union data)); } 详细计算见:https://blog.csdn.net/u

黑马程序员— C语言基础之结构体、枚举、预处理、typedef的使用

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 本章我们主要来学习之前所学的复杂数据类型中的同样也很重要的结构体和枚举的知识,以及C语言中的预处理,typedef的使用,简单介绍一下static和extern等一些比较杂的知识.在开始本章的新知识学习之前首先我们来学习一下根据变量的作用域的不同C语言一般把变量分为两种,局部变量和全局变量.下面我们来分别比较和体会一下这两种不同的变量类型: 根据变量的作用域,可以分为: 1. 局部变量: a.

(转)结构体在内存中的对其规则

参考的网址:http://blog.csdn.net/grantxx/article/details/7577730 一个结构体变量定义完之后,其在内存中的存储并不等于其所包含元素的宽度之和. 例一: #include <iostream> using namespace std; struct X { char a; int b; double c; }S1; void main() { cout << sizeof(S1) << endl; cout <<

结构体在内存中的对其规则

一个结构体变量定义完之后,其在内存中的存储并不等于其所包含元素的宽度之和. 例一: #include <iostream> using namespace std; struct X { char a; int b; double c; }S1; void main() { cout << sizeof(S1) << endl; cout << sizeof(S1.a) << endl; cout << sizeof(S1.b) &l

结构体在内存中所占字节大小计算

作者 :卿笃军 今天上课,老师给我们演示了一下,计算结构体在内存中所占的字节大小.开始给了我们几个例子,然后要我们自己摸索出规律. 注:以下测试全是在win7_64bit  Devcpp 5.5.3环境下测试的.(char 1字节,int 4字节, double 8字节). 也许:你可能认为下面这个答案是 1+4 = 5   (×) #include <stdio.h> struct node { char a; int b; }; int main() { struct node QING;

结构体的定义及使用

结构体的定义 定义一个结构的一般形式为: struct 结构名 { 成员表列 } 成员表由若干个成员组成,每个成员都是该结构的一个组成部分. 对每个成员也必须作类型说明. 例如: struct stu { int num; char name[20]; int age; } 结构类型变量的说明 结构体定义并不是定义一个变量,而是定义了一种数据类型,这种类型是你定义的,它可以和语言本身所自有的简单数据类型一样使用(如 int ). 结构体本身并不会被作为数据而开辟内存,真正作为数据而在内存中存储的

黑马程序员学习笔记--------C语言变量类型,结构体,枚举

本章学习的知识是定义结构体,枚举等自定义的数据类型,已经宏命令,变量类型等细小的知识点,在开始本章的新知识学习之前首先我们要明白的是C语言有丰富的数据类型和运算符,因此计算能力非常强大,计算过程中使用的值一般用变量来存储.变量也是有分类型的,不同类型的变量有不同的存储类型.不同的生命周期.不同的作用域,C语言也提供了一些关键字来设置变量的属性(比如设置存储类型.生命周期). 一.变量类型 变量分为全局变量和局部变量. 首先说明一下局部变量的特点 1> 定义:在函数内部定义的变量,称为局部变量.形