博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
结构体的优化声明
阅读量:5739 次
发布时间:2019-06-18

本文共 876 字,大约阅读时间需要 2 分钟。

声明一个结构体的时候,因为考虑到内存的对齐。例如,int型的变量,需要4个字节,那么它在存储的时候就需要在地址能够被4个字节整除的地方开始申请。

例如我们申请下面这样的一个结构体:

struct{char a;int b;char c;} node1;

在内存分配的时候,char占一个字节,int 占四个字节。

c语言在进行内存分配的时候,需要根据最大的宽度来进行分配。如我们例子中,int需要4个字节,在分配char型的时候,虽然char只占用一个字节,但是也需要从4个字节的位置开始分配。

分配的内存如下:

 a  -    -     -    b                c    -    -    -   

a分配结束后,要自动填充3个字节,再分配b,然后是c,再自动填充3个字节。

所以node1这个结构体的宽度是12

优化声明

我们尽量把对边界要求严格的字段放在前面,要求弱的放在后面(强弱就是相对于宽度对齐来说):

struct{int b;char a;char c;} node1;

 

 b       a  c  -  -

 

这样,先分配int,再分配char,虽然每次申请4个字节,但是最后的长度却是8,因此节省了33%的地址空间。

代码验证

 

// test1107.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "stdio.h"#include "string.h"typedef struct{    int b;    char a;    char c;} node1;typedef struct{    char a;    int b;    char c;} node2;int main(){    printf("%d\n",sizeof(char));    printf("%d\n",sizeof(int));    node1 n1;    node2 n2;    printf("%d %d\n",sizeof(n1),sizeof(n2));    getchar();    return 0;}

 

最后输出:

1

4

8 12

 

转载地址:http://ntyzx.baihongyu.com/

你可能感兴趣的文章
我国古代的勾股定理
查看>>
Linux下的C编程实战
查看>>
[32期] html中部分代码与英语单词关系
查看>>
PHP安装环境,服务器不支持curl_exec的解决办法
查看>>
Count and Say
查看>>
9.1(java学习笔记)正则表达式
查看>>
fopen打开文件失败的问题
查看>>
jQuery|元素遍历
查看>>
sql语句大全
查看>>
RedHat 6 安装配置Apache 2.2
查看>>
Openstack 安装部署指南翻译系列 之 Manila服务安装(Share Storage)
查看>>
underscore.js学习笔记
查看>>
Centos7安装
查看>>
windows下常用命令
查看>>
1.5编程基础之循环控制_29:数字反转
查看>>
iptables的CLUSTER target与以太网交换机的思想
查看>>
组策略 之 设备安装设置
查看>>
人工智能还能干这些?这8种AI应用你可能意想不到
查看>>
实现Hyper-V 虚拟机在不同架构的处理器间迁移
查看>>
linux根目录下的文件解析
查看>>