首页 > 其他分享 >Go结构体对齐

Go结构体对齐

时间:2024-06-08 10:22:16浏览次数:21  
标签:axxx min bbbb 占位 dddd 内存 Go 对齐 结构

具体可以参考b站的幼麟实验室,很硬核

type P struct {
	a bool
	b int32
	c int8
	d int64
	e byte
}

var p P
fmt.Printf("%v\n", unsafe.Sizeof(p) // 32

成员变量对齐方式为:

min(8, 1) = 1,由于是第一个成员,偏移量为0即可,此时内存占位为:a
min(8, 4) = 4,偏移量为4即可,此时内存占位为:axxx | bbbb
min(8, 1) = 1,偏移量为8即可,此时内存占位为:axxx | bbbb | c
min(8, 8) = 8,内存已经占有9位,大于9且是8的整数倍只有16,此时内存占位为:axxx | bbbb | cxxx | xxxx | dddd | dddd
min(8, 1) = 1,直接加入后一个位置,此时内存占位为:axxx | bbbb | cxxx | xxxx | dddd | dddd | e
结构体整体对齐:
此时结构体占有25个字节,并且max(8, 8) = 8,那么必须要扩展成32个字节才满足对齐要求,
故最终内存占位为:axxx | bbbb | cxxx | xxxx | dddd | dddd | exxx | xxxx

标签:axxx,min,bbbb,占位,dddd,内存,Go,对齐,结构
From: https://www.cnblogs.com/qcy-blog/p/18238365

相关文章

  • 二叉树-数据结构
    父节点地址值左子节点地址右子节点地址每一个节点往下面,都是会分成左右两个树的结点度,就是子节点的数量二叉树就是生活中的树的概念树的高度是以最大的数量去数小的往左边放,大的往右边放以根节点为坐标,小于根节点的储存在左边,大的根节点放在右边和根节点相等的数,我们......
  • 红黑树-数据结构
    平衡二叉B树每个节点可以是红或者是黑红黑树不是高度平衡的,他的平衡是“通过自己的红黑规则实现的”红黑规则每个节点是红或者为黑根节点必须是黑色如果一个节点没有子节点或者是父节点,这个节点的相应的指针属性为nil,这些nil视为叶节点,每个叶节点nil是黑色的如果某个节......
  • 【启程Golang之旅】让文件操作变得简单
    欢迎来到Golang的世界!在当今快节奏的软件开发领域,选择一种高效、简洁的编程语言至关重要。而在这方面,Golang(又称Go)无疑是一个备受瞩目的选择。在本文中,带领您探索Golang的世界,一步步地了解这门语言的基础知识和实用技巧。目录初识文件IO的引入读取文件写入文件文件复制......
  • Dragon_Knight_CTF-stack(栈迁移)
    Dragon_Knight_CTF-stack(栈迁移)程序的保护情况如下,可以看到没有开启pie保护Arch:amd64-64-littleRELRO:PartialRELROStack:NocanaryfoundNX:NXenabledPIE:NoPIE(0x3fe000)可以看道main函数也很简洁,只有一个0x10大小的溢出,程序给了libc,版......
  • 【数据结构】图论入门
    引入数据的逻辑结构:集合:数据元素间除“同属于一个集合”外,无其他关系线性结构:一个对多个,例如:线性表、栈、队列树形结构:一个对多个,例如:树图形结构:多个对多个,例如:图图的基本概念及术语图:G=(V,E)V:顶点(数据元素)的有穷非空集合E:边的有穷集合图的类型定义无向图:每......
  • Django上传图片时ImageField的max_length报错
    我使用的版本是Django4.2,有一个模型里定义了ImageField,以下面这个为例:classExample(models.Model)image=models.ImageField(blank=True,upload_to=my_image_path,)当我上传图片的时候,django返回了这样一个错误:Ensurethisfilenam......
  • 如何使用Go语言连接和操作数据库?
    文章目录1.安装MySQL驱动2.连接数据库3.执行查询4.执行插入、更新和删除操作在Go语言中,连接和操作数据库通常使用database/sql包,它提供了一个数据库抽象层,支持多种数据库引擎,如MySQL、PostgreSQL、SQLite等。下面我将以MySQL为例,详细讲解如何使用Go语言连接和......
  • 第一章 MySQL体系结构和存储引擎
    1.1定义数据库和实例数据库:物理操作系统文件或其他形式文件类型的集合实例:MySQL数据库由后台线程以及一个共享内存区组成在MySQL数据库中,实例与数据库的关系通常是一一对应的,即一个实例对应一个数据库,一个数据库对应一个实例MySQL数据库实例在系统上的表现就是一个进程MySQ......
  • 数据结构学习笔记-佛洛依德算法
    最短路径问题的经典解法-佛洛依德算法问题描述:设计算法求解图的最短路径【算法设计思想】初始化距离矩阵:首先,将解决方案矩阵dist[][]初始化为输入图矩阵graph[][],这个矩阵存储了顶点之间的直接距离或者权值。中间顶点迭代:然后,对每一个顶点作为中间顶点进行迭代。算法通过......
  • 安卓ROM包的主要结构和组成部分介绍
    AndroidROM包(ROMpackage)是Android操作系统的固件包,通常用于安装或更新Android设备的操作系统。它的结构包含多个关键组件,每个组件都有特定的功能。以下是AndroidROM包的主要结构和组成部分:1.**boot.img**:  -包含引导内核和ramdisk。引导内核负责启动操作系统,而ramdis......