C语言结构体内存分配详情
2024-10-11 16:32:55
#include <stdio.h> int main()
{
/***************************************************
*
* 结构体内存分析(注意结构体里面定义成员结束后要使用分号):
* struct Date
* {
* int year;
* int month;
* int day;
* };
* struct Student
* {
* int age;
* char sex;
* };
* struct Stu
* {
* int age;
* char a;
* char b;
* char c;
* char d;
* };
* 理论上:结构体所占用的存储空间是各个成员变量所占的存储空间之和。
* 但是由于性能等原因分配内存是按照补齐算法进行分配。
* 补齐算法(对齐算法):结构体所占用的存储空间,必须是所有成员中占用存储空间最大的成员的倍数
* 结构体成员内存分配:分配内存是按照高位寻址,但是结构体分配内存时,把低位内存分配给最先定义的变量
* 注意:
* 1.定义结构体类型(并不会分配存储空间)
* 2.定义结构体变量(真正分配存储空间)
*
****************************************************/
struct Date
{
int year;
int month;
int day;
};
printf("Date类型占用的存储空间是:%d\n", sizeof(struct Date));
struct Student
{
int age;
char sex;
};
printf("Student类型占用的存储空间是:%d\n", sizeof(struct Student));
struct Stu
{
int age;
char a;
char b;
char d;
};
printf("Stu类型占用的存储空间是:%d\n", sizeof(struct Stu));
struct St
{
int age;
char a;
char b;
char d;
};
printf("St类型占用的存储空间是:%d\n", sizeof(struct St));
struct Date date = {, , };
printf("date变量的地址是:%p\n", &date);
printf("year变量的地址是:%p\n", &date.year);
printf("month变量的地址是:%p\n", &date.month);
printf("day变量的地址是:%p\n", &date.day);
return ;
}
Date类型占用的存储空间是:
Student类型占用的存储空间是:
Stu类型占用的存储空间是:
St类型占用的存储空间是:
date变量的地址是:0022fee4
year变量的地址是:0022fee4
month变量的地址是:0022fee8
day变量的地址是:0022feec
最新文章
- jquery的几个常用方法
- 海康威视 NET_DVR_FindFile NET_DVR_PlayBackByTime 尝试读取或写入受保护的内存,这通常指示其他内存已损坏
- 利用PS自动切图、支持svg且支持icoMoon——再也不用四处去转格式了
- 全面认识.NET框架(一)
- 264. Ugly Number II
- C++ Socket编程步骤 【转】
- Mobile Assistant
- 设置ORACLE数据库游标大小
- oracle备份恢复之rman恢复到异机
- Sublime Text 2/3如何支持中文GBK编码
- Flashback Drop实例操作
- VC多线程编程
- 活动倒计时-兼容ios
- ASP.NET 设计模式:设计模式和原则简述
- memcached源码剖析——流程图
- 最大堆(Java数组实现)
- 网络I/O中的同步、异步、阻塞和非阻塞概念
- 201771010118 马昕璐《面向对象程序设计java》第十二周学习总结
- HTML5:离线存储
- spring 整合junit进行测试