结构体,共用体,枚举所占内存大小

结构体要注意位补齐(有4位补齐和8位补齐,默认8位)

 1 #include<stdio.h>
 2 #pragma pack(push)
 3 #pragma pack(4)
 4 struct test
 5 {
 6
 7     char a; //补3位
 8     long c;
 9     char d;
10     char h;//补2位
11     int b;
12     char e;  //补3位或补7位
13     double f;
14     char g;   //补3位或补7位
15 }s1;
16 #pragma pack(pop)
17
18 typedef struct{
19     double a;
20     char b;
21 }s2;
22
23 union test2
24 {
25     char a;
26     short b;
27 }s3;
28
29 enum week{sun=7,mon=1,tue,wed,thu,fri,sta};
30 enum week weekday;
31
32 void main(void)
33 {
34     printf("s1:%d \n",sizeof(s1));
35     printf("s2:%d \n",sizeof(s2));
36     printf("s3:%d \n",sizeof(s3));
37     printf("week:%d \n",sizeof(weekday));
38 } 

以下是运行结果

时间: 2024-10-26 00:05:32

结构体,共用体,枚举所占内存大小的相关文章

结构体所占内存大小

结构体所占内存大小划分原则: 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从

C++类所占内存大小计算

C++类所占内存大小计算 转载时请注明出处和作者联系方式文章出处:http://blog.csdn.net/chenchong08作者联系方式:[email protected] 说明:笔者的操作系统是32位的. class A {}; sizeof( A ) = ?sizeof( A ) = 1明明是空类,为什么编译器说它是1呢?空类同样可以实例化,每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二的地址.所

瘋子C语言笔记(结构体/共用体/枚举篇)

 (一)结构体类型 1.简介: 例: struct date { int month; int day; int year; }; struct student { int num; char name[20]; char sex; int age; struct date birthday; /*birthday 是 struct date 类型*/ char addr[30]; }student1,student2; (1):结构体可嵌套 (2):与枚举相比结构体内元素为变量,而枚举为常

8.1 结构体 共用体 typedef 枚举

typedef :  给类型起一个新的名字 int main() { unsigned int a = 10; } 可以用下面表示: typedef unsigned int u32_t; int main() { u32_t a = 10; } 与definde的区别: typedef char *  N; #define N char* N p1,p2,p3; define的话  p2 p3 变成了char 类型 结构体 :不同类型元素的汇聚 ①匿名结构体 struct{ int id;  

如何获取一个Java对象所占内存大小

新建一个maven工程 我们先在IDEA中新建一个名为ObjectSizeFetcherAgent的maven工程,如下图: 在maven项目中的pom.xml中新增一个打jar包的插件,如下: <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId&g

ActivityManager(二)--获取应用所占内存大小

private void getRunningAppProcessInfo() { mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); //获得系统里正在运行的所有进程 List<RunningAppProcessInfo> runningAppProcessesList = mActivityManager.getRunningAppProcesses(); for (Running

Android获取应用所占内存大小

private void getRunningAppProcessInfo() { mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); //获得系统里正在运行的所有进程 List<RunningAppProcessInfo> runningAppProcessesList = mActivityManager.getRunningAppProcesses(); for (Running

php获取变量所占内存大小的方法

$start_memory = memory_get_usage();$foo = "Some variable";echo memory_get_usage() - $start_memory; 这个可以获取所有变量类型的大小 strlen($foo) 这个可以获取当前字符串的字节大小 除以8就是位大小 原文地址:https://www.cnblogs.com/ysbl/p/12590376.html