#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

C语言结构体内存分配详情的更多相关文章

  1. C#new出来的结构体内存分配在堆上

    如题,有同事说因为结构体是值类型,所以 new出来的也是分配在栈上的.我的直觉是但凡使用new的东西都在堆上分配内存,除非C#对结构体做了特殊处理. new int[10]这个说明不了什么,因为数组是 ...

  2. C语言-结构体内存对齐

    C语言结构体对齐也是老生常谈的话题了.基本上是面试题的必考题.内容虽然很基础,但一不小心就会弄错.写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的 ...

  3. go语言结构体内存对齐

    cpu要想从内存读取数据,需要通过地址总线,把地址传输给内存,内存准备好数据,输出到数据总线,交给cpu,如果地址总线只有8根,那这个地址就只有8位可以表示[0,255]256个地址,因为表示不了更多 ...

  4. C语言中结构体内存存储方式

    C语言中结构体内存存储方式 结构体的默认存储方式采用以最大字节元素字节数对其方式进行对齐,例如一个结构体中定义有char.int类型元素,则结构体存储空间按照int类型占用字节,如果还有double类 ...

  5. C语言之结构体内存的对齐

    C语言之结构体内存的对齐 大纲: 零.引例 一.结构体内存对齐规则 二.怎样计算结构体的大小 三.设计结构体时要注意的方面   四.为什么存在内存对齐 五.修改默认对齐数 在前面的章节中,我们谈到了C ...

  6. 【APUE】Chapter17 Advanced IPC & sign extension & 结构体内存对齐

    17.1 Introduction 这一章主要讲了UNIX Domain Sockets这样的进程间通讯方式,并列举了具体的几个例子. 17.2 UNIX Domain Sockets 这是一种特殊s ...

  7. 关于结构体内存对齐方式的总结(#pragma pack()和alignas())

    最近闲来无事,翻阅msdn,在预编译指令中,翻阅到#pragma pack这个预处理指令,这个预处理指令为结构体内存对齐指令,偶然发现还有另外的内存对齐指令aligns(C++11),__declsp ...

  8. struct结构体内存大小

    一. 基本原则 1. struct中成员变量的声明顺序,与成员变量对应的内存顺序是一致的: 2. struct本身的起始存储地址必须是成员变量中最长的数据类型的整倍数,注意是最长的数据类型,而不是最长 ...

  9. C++ struct结构体内存对齐

    •小试牛刀 我们自定义两个结构体 A 和 B: struct A { char c1; char c2; int i; double d; }; struct B { char c1; int i; ...

随机推荐

  1. Fedora LVM磁盘大小调整

    umount /dev/fedora/swap e2fsck -f /dev/fedora/swap

  2. PHP中unset和null的比较

    起因 因为感兴趣于unset($var)和$var=null的区别,于是找了一个stackoverflow高分问题及答案,翻译以供参考. 注:以下的问题和答案翻译自http://stackoverfl ...

  3. 人生苦短,我学PYTHON

    人生苦短我学PYTHON 坚持 努力

  4. $@、$*和环境变量IFS

  5. 华南理工大学“三七互娱杯”程序设计竞赛 G: HRY and tree

    题意:给出一棵树,定义两点间代价为两点路径上最长的边权,问任两点间的代价和. 解法:这道题的解法十分巧妙:直接用Kruskal对这棵树求最小生成树,然后对于即将加入到MST的这条边(u,v,w),这条 ...

  6. mysqldump 导出数据库

    mysqldump -h47.52.67.230 -P3306 -uroot -pAbc\!@#456789 --hex-blob --opt test_fooku_db >/home/test ...

  7. pygame游戏框架

    #_author:来童星#date:2019/12/22 import pygame import sys pygame.init() size=width,height=640,480 screen ...

  8. Python 爬取各大代理IP网站(元类封装)

    import requests from pyquery import PyQuery as pq base_headers = { 'User-Agent': 'Mozilla/5.0 (Windo ...

  9. kafka为什么快?

    为什么Kafka那么快 原创 2016-07-18 fireflyc 写程序的康德 网上有很多Kafka的测试文章,测试结果通常都是"吊打"其他MQ.感慨它的牛B之余我觉得必要仔细 ...

  10. NX二次开发-NXOpen::Drawings::DrawingSheet Class Reference

    NX11+VS2013 #include <NXOpen/Section.hxx> #include <NXOpen/SectionCollection.hxx> #inclu ...