字节对齐测试实例

先看理论:

1. 更改C编译器的缺省字节对齐方式

在缺省情况下,C编译器为每一个变量或是数据单元按其自然对界条件分配空间。一般地,可以通过下面的方法来改变缺省的对界条件:
· 使用伪指令#pragma pack (n),C编译器将按照n个字节对齐。
· 使用伪指令#pragma pack (),取消自定义字节对齐方式。

另外,还有如下的一种方式
· __attribute((aligned (n))),让所作用的结构成员对齐在n字节自然边界上。如果结构中有成员的长度大于n,则按照最大成员的长度来对齐
· __attribute__ ((packed)),取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐。

 

测试源码:

#include <stdio.h>
#include <iostream>
#include <map>
using namespace std;
struct stu
{
char sex;
long long ss;	// 8
short length;	// 2
int s2;			// 4
char name[10];
//}__attribute__((aligned(1)));		// 按最大成员的长度来对齐(但不超过N,否则按N对齐;N=4(32位机器)/8(64位机器))
}__attribute__((packed));			// 1字节对齐
void test()
{
struct stu my_stu;
cout << sizeof(my_stu) << endl;
printf("%p, %p, %p, %p, %p\n", &my_stu.sex, &my_stu.ss, &my_stu.length, &my_stu.s2, &my_stu.name);
}
int main()
{
test();	
return 0;
}

测试结果与我代码中的注释一致,代码本身也比较简单,就不解释了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403515.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring-初始化完成后运行指定内容

方案1:继承ApplicationListener public class InstantiationTracingBeanPostProcessor implements ApplicationListener<ContextRefreshedEvent> { Override public void onApplicationEvent(ContextRefreshedEvent event) { //需要执行的逻辑代码&#xff0c;当spring容…

读取Android系统的多媒体库

android系统有一个数据库表会把系统中的所有多媒体文件信息读入&#xff0c;开机的时候会自动读取&#xff0c;也可以模拟发广播让系统扫描。 1.拿到一个ContentResolver ContentResolver resolver context.getContentResolver(); 2.查询数据库表&#xff0c;返回一个cursor 1…

关闭eslint检验;vue-cli3搭建的vue项目关闭eslint;脚手架3关闭eslint;

本文是解决关闭eslint的问题&#xff1b;如果想要开启eslint和配置&#xff0c;可以查看这篇开启eslint检验&#xff1b; 我们使用vue-cli3脚手架搭建vue项目时候&#xff0c;会默认选中eslint风格代码&#xff1b;如果想要关闭eslint检验&#xff0c;有如下两种方案&#xff…

C++模板类示例

记录下一道简单题目的实现&#xff1a;将一个二维矩阵A转换为B&#xff0c;B[i][j]的值用A中i行的最大值和j列的最小值的平均值为替换。 解题思路很简单&#xff0c;求一下每行的最大值和每列的最小值&#xff0c;分别存起来。接下来就是求平均数了。 为了练习下模板&#xff…

wechat code miniprogram 没有找到可以构建的 NPM 包

首先在小程序根目录打开命令窗口&#xff0c;输入 npm init 创建好package.json文件后输入 npm i bootstrap --production 就ok啦 这里解释下 npm install --production 只安装dependencies而不安装devDependencies。 production 很重要

发布一个http请求封装类

调试时经常要模拟提交&#xff0c;在抓取别人页面时也经常要去请求别人的页面&#xff0c;于是就写了下面这个类。封装了三种post提交方法和一个request请求方法&#xff0c; <?php /** * HTTP常用请求封装 * * Copyright(c) 2012 by ustb80. All rights reserved * …

父盒子高度为子盒子总高度自动撑满 height: fit-content; //设置内容高度

给父盒子设置高度子盒子总高度 属性&#xff1a; height: fit-content; //设置内容高度

转一篇关于并发和并行概念的好文,附带大神评论

转自&#xff1a;https://laike9m.com/blog/huan-zai-yi-huo-bing-fa-he-bing-xing,61/ 还在疑惑并发和并行&#xff1f; OK&#xff0c;如果你还在为并发&#xff08;concurrency&#xff09;和并行&#xff08;parallesim&#xff09;这两个词的区别而感到困扰&#xff0c;那…

MySQL索引背后的数据结构及算法原理-转

转 http://www.codinglabs.org/html/theory-of-mysql-index.html 摘要 本文以MySQL数据库为研究对象&#xff0c;讨论与数据库索引相关的一些话题。特别需要说明的是&#xff0c;MySQL支持诸多存储引擎&#xff0c;而各种存储引擎对索引的支持也各不相同&#xff0c;因此MySQL…

selenium-webdriver for node 鼠标滑动到指定元素

在做滑动到底部的时候&#xff0c;网上看了别人的资料用不起&#xff0c;后面在selenium官网找到鼠标移动事件才解决&#xff0c;控制滑动到指定位置 代码&#xff1a; let searchBtn driver.findElement(By.id("tb_rich_poster"));const actions driver.actions…

解决uni微信小程序的滚动条显示隐藏;小程序滚动条隐藏;隐藏微信小程序滚动条;

直接在当前页面css下书写即可 不是在某个盒子class下书写 /* 解决小程序和app滚动条的问题 *//* #ifdef MP-WEIXIN || APP-PLUS */::-webkit-scrollbar {display: none;}/* #endif */

第八章 心得体会

通过第八章的学习&#xff0c;了解了蜂鸣器的工作原理以及利用PWM驱动使蜂鸣器发出声音。、 学到的知识&#xff1a; 一、Linux驱动的代码重用 1、编译是由多个文件组成的Linux驱动 如果Linux驱动只有1个源代码文件&#xff0c;0bj-m变量可以和源代码文件同名。如果Linux驱动包…

vue项目通过directives指令实现vue实现盒子的移动;vue拖拽盒子;vue移动;

vue项目&#xff1a;点击拖拽盒子&#xff1b;移动盒子&#xff1b; 代码可直接复制&#xff1a;&#xff08;注意需要在移动的盒子上添加 v-指令 注意采用固定定位&#xff09; <template><div class"far_box"><div>{{ msg }}</div><!-…

JSP邮箱信息截取

// 将前四位的显示替换成“****”&#xff0c;不足四位的全部替换成“****”。 function email() { var str1 "${sessionScope.gameUser.email}"; var str2 str1.split(""); var flag1 str2[0].length; var s…

SuperAgent 中文乱码星号问号问题

看到星号问号了么&#xff0c;SuperAgent 爬取时中文乱码星号&#xff0c;只有中文是乱码&#xff0c;其它都是对的&#xff0c;肯定需要转义&#xff0c;找了两个小时&#xff0c;最后度娘看到个帖子 https://cloud.tencent.com/developer/article/1445392试了试&#xff0c;…

括号匹配(二)

//C v0.01 不知题意&#xff0c;正在理解&#xff0c;正在&#xff08;一&#xff09;上修改。 #include <stdio.h> #include <string.h> #include <stdlib.h> #define STACK_SIZE 10000 typedef struct STACK{ char stack[STACK_SIZE]; int pointer; }STSTA…

linux 下安装mysql

第一&#xff1a;保证服务器下没安装过MYSQL 由于数据库版本不同&#xff0c;5.7与8.0的数据库命令的使用方式也有些差异 本地数据如果用的老版&#xff0c;服务器用的新版&#xff0c;比如datatime这种记录时间的字段会传输报错 开始安装&#xff1a; 下载mysql mysql 官…

制作 Windows8   to Go

制作 Windows to Go 将准备好的 Windows 8 的镜像文件&#xff08;ISO 格式&#xff09;加载到虚拟光驱中去&#xff1b;将准备好的 USB 存储设备插入&#xff1b;打开控制面板&#xff0c;点击“Windows To Go”&#xff1b;在接下来的选项中按照步骤提示选择对应的 Win 8 的镜…

vue监听浏览器刷新和关闭;

注意&#xff1a;区分不了浏览器是触发了刷新还是关闭&#xff0c;而且提示的弹框是无法自定义的&#xff1b;如果有大佬有方法能区分&#xff0c;还请评论学习一下&#xff01;感谢&#xff01; 代码可直接复制&#xff1a; <template><div><div /></di…

Linux 线程(1):线程概述

一、进程与程序的区别 程序是应用程序作为一个静态文件存储在计算机系统的硬盘等存储空间中&#xff0c;而进程则是处于动态条件下由操作系统维护的系统资源管理实体&#xff0c;也就是程序的动态执行过程。 二、进程与线程的区别 进程是系统中程序执行和资源分配的基本单位…