C/C++编译器的字节对齐方式

这篇具有很好参考价值的文章主要介绍了C/C++编译器的字节对齐方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C/C++编译器的缺省字节对齐方式为自然对界。即在缺省情况下,编译器为每一个变量或是数据单元按其自然对界条件分配空间。
在结构中,编译器为结构的每个成员按其自然对界(alignment)条件分配空间。各个成员按照它们被声明的顺序在内存中顺序存储(成员之间可能有插入的空字节),第一个成员的地址和整个结构的地址相同。

  1. 编译器缺省的结构成员自然对界条件为“N字节对齐”,N即该成员数据类型的长度。如int型成员的自然对界条件为4字节对齐,而double类型的结构成员的自然对界条件为8字节对齐。若该成员的起始偏移不位于该成员的“默认自然对界条件”上,则在前一个节面后面添加适当个数的空字节。
  2. 编译器缺省的结构整体自然对界条件为:该结构所有成员中要求的最大自然对界条件。若结构体各成员长度之和不为“结构整体自然对界条件的整数倍”,则在最后一个成员后填充空字节。

例子:

struct Test
{ 
  char x1; // 成员x1为char型(其起始地址必须1字节对界),其偏移地址为0
  char x2; // 成员x2为char型(其起始地址必须1字节对界,其偏移地址为1
  float x3; // 成员x3为float型(其起始地址必须4字节对界),编译器在x2和x3之间填充了两个空字节,其偏移地址为4
  char x4; // 成员x4为char型(其起始地址必须1字节对界),其偏移地址为8
};

在Test结构体中,最大的成员为float x3,因此结构体的自然对界条件为4字节对齐。则结构体长度就为12字节,内存布局为1100 1111 1000。
C/C++编译器的字节对齐方式,c++,c语言,c++,开发语言,pack,pragma,对齐文章来源地址https://www.toymoban.com/news/detail-805107.html

到了这里,关于C/C++编译器的字节对齐方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言编译器(C语言编程软件)

    对于当前主流桌面操作系统而言,可使用 Visual C++、GCC 以及 LLVM Clang 这三大编译器。 Visual C++(简称 MSVC)是由微软开发的,只能用于 Windows 操作系统;GCC 和 LLVM Clang 除了可用于 Windows 操作系统之外,主要用于 Unix/Linux 操作系统。 像现在很多版本的 Linux 都默认使用 GCC 作为

    2024年02月03日
    浏览(44)
  • 第一课-C 语言,IDE, 编译器

    C/C++ 语言的优势:  语法简单结构紧凑;  - 32个,9种控制语句  代码书写灵活;  有丰富多样的运算符;- 34个运算符  有丰富的数据结构;  几乎是现在计算机语言的鼻祖。  指令,指令集,程序    按是否强制类型分类:     强类型语言(必须指明变量类型) c c++   

    2023年04月08日
    浏览(44)
  • C语言编译器之三,VC++

    三、Visual C编译器         Microsoft Visual C++(简称Visual C++、MSVC、VS或VC)是微软公司的免费C++编译器与开发工具,具有集成开发环境(Visual Studio),可提供编辑C语言,C++以及C++/CLI等编程语言。在Windows系统中,Microsoft Visual C++的应用还是相当广泛的。          3.1、Vis

    2024年02月05日
    浏览(40)
  • C语言【编译器、变量、输入输出有关的】

    一些想到的【从编译器到变量到输入输出有关的】的问题,有些是按自己理解写的答,有些待解决。 C语言可以跨平台,汇编不可以,编译时C语言会根据不同系统翻译成不同形式的汇编语言。 C语言中算数运算会在寄存器中运行,变量保存在堆或栈中。 遗留问题 : C语言 变量

    2024年02月05日
    浏览(42)
  • Ubuntu 用gcc/CMakefile编译器 编译、运行c语言程序

    目录 一. 在Ubuntu系统下用c语言编写一个简单的输出hello world 的程序,并编译、运行。 1.1 gcc/g++简介 1.2 c++程序输出 Hello World: 1.3 c语言程序输出 Hello World: 二. 编写一个主程序文件main1.c和一个子程序文件sub1.c,实现函数间的调用 2.1  编写sub1.c 和main1.c 函数 2.1.1 编写sub1.c函数

    2024年02月04日
    浏览(51)
  • python语言在线编译器,python 在线编程工具

    大家好,小编来为大家解答以下问题,python语言在线编译器,python 在线编程工具,今天让我们一起来看看吧! 1.python在线编译器的解决方案 方案一:vscode web版(vscode online) 大名鼎鼎的vscode 推出了web版,也就是说可以在网页上进行编程了。 github地址:https://github.com/microsoft/v

    2024年04月26日
    浏览(42)
  • 【JavaScript】JavaScript 简介 ④ ( 解释型语言 和 编译型语言 | 计算机程序本质 | 编译器 和 解释器 )

    计算机 的 程序 是在 CPU 上执行的 , CPU 上执行的只有匹配该 CPU 的机器码指令 , 不同类型的 CPU 执行的 机器码指令 格式不同 , X86 和 ARM 执行的 机器码 指令格式是不同的 ; 机器码指令 是 二进制的 , 所有在 计算机 上执行的程序 , 都是 若干 二进制机器码 的集合 ; 计算机 只能执

    2024年03月22日
    浏览(47)
  • 【开发环境】Windows下搭建TVM编译器

    关于搭建TVM编译器的官方文档:Install from Source — tvm 0.14.dev0 documentation (apache.org) 1. 安装Anaconda 首先我们需要安装Anaconda,因为其中包含着我们所需要的各类依赖: 进入Anaconda官网https://www.anaconda.com/products/distribution,下载Windows版本,下载完成后运行.exe, 可以更改安装路径(

    2024年02月15日
    浏览(53)
  • ARM_Linux的交叉开发以及交叉编译器

    目录 为什么要使用交叉开发 为什么要使用交叉编译 交叉编译器的安装 交叉编译器的使用 交叉开发是指在通用的电脑上吧程序编写,编译,调试好,再下载到嵌入式产品中去运行,对于一些简单的程序的话,直接在电脑上编译调试好即可,但是对于一些需要操作硬件的开发

    2024年01月23日
    浏览(56)
  • 【Linux环境基础开发工具】编译器-gcc/g++

    上一篇博客, 我们学习了vim编辑工具,学会了怎么写代码, 这篇文章,我将分享代码该怎么编译的问题。 目录 写在前面: 1. gcc和g++介绍 2. gcc是如何编译程序的 1. 预处理 2. 编译 3. 汇编 4. 链接 3. gcc的选项介绍 4. 我们使用的函数是哪来的 5. 我们的.o文件和库是如何链接的?

    2024年02月10日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包