

[译] Go语言结构体中属性的顺序将影响结构体的大小 | yoko blog
source link: https://pengrl.com/p/16608/?
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

learn and live
[译] Go语言结构体中属性的顺序将影响结构体的大小
在Go语言中,结构体的大小取决于内部属性的类型以及它们的排列顺序。
1 | struct { |
上面这个结构体的大小和下面这个结构体的大小是不同的,尽管它们只是属性的定义顺序不同。
1 | struct { |
为什么会这样?可以把内存想象成是由一个一个固定大小的小盒子组成的。如果结构体的某个属性的大小大于当前盒子剩余的大小,那个这个属性将填入下一个盒子中。这将造成上一个盒子的尾部空间没有被填入数据,但是却占用了内存。这种结构体初始化每个变量实例时都会有这种情况。
这里有一个非常棒的网站(http://golang-sizeof.tips/),你可以在这个网站上输入一个结构体的定义,然后查看内存布局。我们拿上面第一个结构体来看:
下面是第二个结构体的展示:
感谢这个网站。下次当你有一个非常大的结构体类型的数组时,就可以通过这个网站来估算数组的内存大小了。
英文链接: Preslav Rachev | Reduce Struct Size by Laying out Attributes Accordingly https://preslav.me/2019/08/27/reduce-struct-size-by-laying-out-attributes-accordingly/
本文完,作者yoko,尊重劳动人民成果,转载请注明原文出处: https://pengrl.com/p/16608/
Recommend
-
11
在C语言程序开发中,有经验的程序员有时会定义只有一个数组成员的结构体,虽然语法简单,但是却常常让初学者感到迷惑:这么做有什么好处吗?struct ABC { unsigned long array[MAX]; } abc; 答案是肯定的,这样做主要有两个...
-
21
C语言结构体大小等于它的所有成员大小之和吗? 发表于 2019-08-12 20:08:37...
-
11
结构体中怎样进行内存对齐:带你学习1+4=8的情况
-
5
loki::AssocVector 保留插入顺序的关系型结构 作者: 张志强 ...
-
6
JApidocs 怎么指定响应实体中的属性必填呢? 开源问答 ...
-
4
V2EX › Go go 结构体中的字段, 那种情况下定义为私有, 那种情况定义为公有? chaleaoch ·...
-
5
顺序表概念及结构 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。顺序表一般可分为: 静态顺序表:使用定长数组存储元素动...
-
5
【测试开发全栈-HTML】(8)css字体属性之字体大小 精选 原创 小小迷糊 2022-11-04 16:...
-
7
使用设计模式实现实体中多个依赖属性的验证模块 解道Jdon
-
8
title: C语言结构体大小分析 author: saopigqwq233 date: 2022-04-05 C语言结构体大小分析 一,基本类型 C语言自带的数据类型大小如下 数...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK