linux下enum类型占几个字节,enum大小问题

问题描述

板卡有两个CPU,ARM+MIPS,同时运行三个系统REE(linux) + TEE(SierraTEE) + SEE(TDS)。TEE跟SEE通过RPC进行通信,有enum成员的结构体信息传递会出错,如下结构体:struct sTag {

enum A;

enum B;

int C;

enum D;

};

问题分析

这是由于SierraTEE和TDS使用的是不同的编译器,而enum这种结构占用内存的大小只有在编译的时候由编译器决定的。显然这是由于两个编译器对于enum的分配内存方式不一致导致的。

gcc编译选项对此有相关说明:-fshort-enums

Allocate to an enum type only as many bytes as it needs for the declared range of possible

values. Specifically, the enum type will be equivalent to the smallest integer type which

has enough room.

Warning: the -fshort-enums switch causes GCC to generate code that is not binary compatible

with code generated without that switch. Use it to conform to a non-default application

binary interface.

即若指定了-fshort-enums,编译器会分配满足需求的内存给enum即可,以节省内存;如:若打开了-fshort-enums,sizeof(struct sTag) = 12;

若不打开-fshort-enums,sizeof(struct sTag) = 16;

问题解决

从根本上,尤其是在不同CPU上要使用相同变量作为参数,更应该避免使用enum,因为其size是不能被确定的。但由于TDS中相关的头文件定义和API定义早以确定并广泛使用了,这无法修改。

只要确认两个编译器使用相同的分配策略处理enum结构,我们选择-fno-short-enums,即要求编译器不要采取节省内存的方式,把没一个enum变量都分配为int的大小。

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

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

相关文章

ASP.NET导出word实例

ASP.NET导出word实例 最近遇到一个题目就是如何在asp.net中将数据导出到word中,由于数据是动态的,所以需要在后台拼出想要的的格式,翻遍了网页找出了一个比较满意的代码,感谢那位高手。代码如下: public void Download…

Java LocalDate类| toString()方法与示例

LocalDate类toString()方法 (LocalDate Class toString() method) toString() method is available in java.time package. toString()方法在java.time包中可用。 toString() method is used to represent this LocalDate as a String by using the standards ISO-8601 format.…

linux14.04 Apache,Ubuntu 14.04编译安装Apache

Ubuntu下编译安装apache需要预先编译安装多个依赖件,包括:apr, apr-util,pcre,zlib-devel,等,相当麻烦,记录于此备查.由于Ubuntu系统默认安装时没有安装C,所以也需要先安装c编译需要相关的组件。[注]apt-ca…

Android Jenkins自动化构建之路

install Jenkins 添加Jenkins的源(repository): sudo wget -O /etc/yum.repos.d/jenkins.repo http://jenkins-ci.org/redhat/jenkins.repo sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key复制代码yum install Jenkins复制代码…

java 根据类名示例化类_Java即时类| plusMillis()方法与示例

java 根据类名示例化类即时类plusMillis()方法 (Instant Class plusMillis() method) plusMillis() method is available in java.time package. plusMillis()方法在java.time包中可用。 plusMillis() method is used to add the given duration in milliseconds to this Insta…

linux dd入门,Linux基础知识:Linux中DD命令详解

1.dd命令简介功能:把指定的输入文件拷贝到指定的输出文件中,并且在拷贝过程中可以进行格式转换。可以用该命令实现DOS下的diskcopy命令的作用。先用dd命令把软盘上的数据写成硬盘的一个寄存文件,再把这个寄存文件写入第二张软盘上&#xff0c…

CSS 字体(font)实例

1、设置文本字体 font-family:"Times New Roman",Georgia,Serif font-family:Arial,Verdana,Sans-serif 2、设置字体尺寸 font-size: 100% 3、设置字体风格 font-style:normal font-style:italic font-style:oblique 4、设置字体的异体 font-variant:normal text-var…

Java Duration类| 带示例的compareTo()方法

持续时间类compareTo()方法 (Duration Class compareTo() method) compareTo() method is available in java.time package. compareTo()方法在java.time包中可用。 compareTo() method is used to compare this Duration object to the given object. compareTo()方法用于将此…

linux定时任务执行url,科技常识:linux定时任务访问url实例

今天小编跟大家讲解下有关linux定时任务访问url实例 ,相信小伙伴们对这个话题应该也很关注吧,小编也收集到了有关linux定时任务访问url实例 的相关资料,希望小伙伴会喜欢也能够帮助大家。这次linux定时任务设置成功,也算是自己学习…

lcase和ucase_在SQL中使用UCASE(),LCASE()和MID()函数

lcase和ucaseUpper Case, Lower Case and MID functions are scalar functions which return a single value, based in the input value. 大写,小写和MID函数是标量函数,它们基于输入值返回单个值。 As you all know sometimes different databases ha…

Maven的Settings.xml配置文件解释

该配置用于单用户配置和全局配置, 单用户配置默认存放于 ${user.home}/.m2/目录中. 全局配置默认存放于Maven安装目录下面的conf目录中. 这两个默认的位置都可以修改. <?xml version"1.0" encoding"UTF-8"?> <settings xmlns"http://m…

linux ntp手动授时,关于我校NTP授时服务的使用说明

校园网用户&#xff1a;我中心于近期采购了GPS北斗授时服务设备&#xff0c;该设备可实现纯GPS模式、纯北斗模式和混合模式与卫星对时&#xff0c;同时实现对校内设备授时的功能。支持所有NTP协议的服务器、PC、嵌入式设备等&#xff0c;包括但不限于&#xff1a;Microsoft Win…

一串字符串转换为ascii_将ASCII字符串(char [])转换为C中的BYTE数组

一串字符串转换为asciiGiven an ASCII string (char[]) and we have to convert it into BYTE array (BYTE[]) in C. 给定一个ASCII字符串(char [])&#xff0c;我们必须将其转换为C语言中的BYTE数组(BYTE [])。 Logic: 逻辑&#xff1a; To convert an ASCII string to BYTE…

debugging Auto Layout:Logical Errors

Logical Errors逻辑错误 Logical errors are simply bugs. Somewhere, you have an assumption that is faulty. Perhaps it’s an assumption about how Auto Layout calculates the views’ frames. Perhaps it’s an assumption about the set of constraints that you’ve …

linux反序列化漏洞,思科多个产品Java反序列化漏洞(CVE-2015-6420)

思科多个产品Java反序列化漏洞(CVE-2015-6420)发布日期&#xff1a;2015-12-15更新日期&#xff1a;2015-12-17受影响系统&#xff1a;Cisco Unified ComputingCisco Voice and Unified Communications DevicesCisco Wireless描述&#xff1a;CVE(CAN) ID: CVE-2015-6420思科是…

密码学替代技术_替代技术及其类型| 密码学

密码学替代技术As we already discussed what are the Substitution techniques and one of its type Ceasar Cipher? So we are not discussing it here for that please refer to Cryptography: CeasarCipher here: Cryptography: Caesar Cipher and its Python Implementat…

Flask+uwsgi+Nginx环境搭建

2019独角兽企业重金招聘Python工程师标准>>> 开源软件准备 需要的软件列表&#xff1a; setuptools-33.1.1.zip Python-2.7.13.tgz pip-9.0.1.tar.gz nginx-1.10.3.tar.gz 软件统一上传到/usr/local/src/下&#xff0c;python是使用自己编译的。Python安装 先安装以…

穿越迷宫c语言程序设计教程课后答案,实验二 迷宫实验.doc

#include #define ROW 11#define COLUMN 15typedef struct{ /*栈中的数据元素的类型定义*/int row; /*行下标*/int col; /*列下标*/int direction; /*下一步移动方向*/} DATA;Typedif struct node{ /* 栈类定义*/DATA data;Struct node *next;}LinkStack;Typedef struct{/*移动…

ofb模式_密码学中的输出反馈模式(OFB)

ofb模式This is an output feedback (OFB) mode is similar in structure to that of CFB in Cryptography. It is the output of the encryption function that is fed back to the shift register in OFB in the cryptography, whereas in CFB in the mode of blocks, the ci…

JavaScript0-闭包

1.闭包的概念&#xff1a;在JavaScript中局部作用域总是能够访问到全局作用域&#xff0c;即内部函数总是能够访问到外部函数的参数和变量&#xff0c;即使内部函数调用完毕。也就是指有权访问到函数作用域里的变量。 function fn1() {var x 0;return function() {cosole.log(…