ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

探究struct中每个类型内存容量的大小及总内存大小的关系

2022-01-27 18:31:49  阅读:135  来源: 互联网

标签:struct +% int double 内存大小 char sizeof 内存容量


2022.1.27实验

实验目的:探究struct中每个类型内存容量的大小及总内存大小的关系

总实验如下:

#include<stdio.h>
//对结构的研究
struct structure0 {
	double a;	
	char b;
};
struct structure1 {
	char a;	
	double b;
	char c;
};
struct structure2 {
	int a;
	int b;
	double c;
	int d;
	int e;
};
struct structure3 {
	int a;
	int b;
	char c;
};
int main() {
	struct structure1 a;
	struct structure2 b;
	struct structure3 c;
	struct structure0 d; 
	printf("%u=%u+%u+%u?\n",sizeof(a),sizeof(a.a),sizeof(a.b),sizeof(a.c));//多了3 
	printf("a:%p a.a:%p a.b:%p a.c:%p\n",&a,&a.a,&a.b,&a.c);
	printf("%u=%u+%u+%u+%u+%u?\n",sizeof(b),sizeof(b.a),sizeof(b.b),sizeof(b.c),sizeof(b.d),sizeof(b.e));//多了4 
	printf("b:%p b.a:%p b.b:%p b.c:%p b.d:%p b.e:%p\n",&b,&b.a,&b.b,&b.c,&b.d,&b.e);
	printf("%u=%u+%u+%u?\n",sizeof(c),sizeof(c.a),sizeof(c.b),sizeof(c.c));//多了3 
	printf("c:%p c.a:%p c.b:%p c.c:%p\n",&c,&c.a,&c.b,&c.c);//指针地址为元素首地址,连续排列 
	printf("%u=%u+%u?\n",sizeof(d),sizeof(d.a),sizeof(d.b));
	printf("d:%p d.a:%p d.b:%p\n",&d,&d.a,&d.b);
	/*
	猜测1:结构的sizeof与结构中的变量类型有关; 
	猜测2:若结构类型全部一致,则sizeof即为所有类型之和,比如所有四个元素都是int,则是16字节;
	若结构类型中有一个与其它不一样,则sizeof为所有类型之和加上元素个数;经验证猜想2不正确 
	猜测3:当结构中有连续不满4个char类型时,分配给它的都是4个字节地址;
	猜测4:当结构中只有一个char时,和最临近的前面那个类型的大小一样;
	猜测5:当结构中优先级高的在前面则后面默认使用优先级高的地址的大小,比如double在int前则是16;
	若int在double前也是12; 
	*/ 
}

标签:struct,+%,int,double,内存大小,char,sizeof,内存容量
来源: https://www.cnblogs.com/Linkdom/p/15850753.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有