问题描述

板卡有两个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的大小。

linux下enum类型占几个字节,enum大小问题相关推荐

  1. linux下enum类型占几个字节,第11课 - enum, sizeof, typedef 分析

    第11课 - enum, sizeof, typedef 分析 1. enum介绍 (1)enum是C语言中的一种自定义类型,和struct.union地位相同,格式如下: // enum每个值的最后 ...

  2. C++ string类型占几个字节

          在C语言中我们操作字符串肯定用到的是指针或者数组,这样相对来说对字符串的处理还是比较麻烦的,好在C++中提供了 string 类型的支持,让我们在处理字符串时方便了许多.这篇文章并不是讲解 ...

  3. C++中的string 类型占几个字节

    C++中的string 类型占几个字节 一:先看一道面面试题: 题目是要求输出:TrendMicroSoftUSCN 然后要求修改程序,使程序能输出以上结果.代码如下: #include <io ...

  4. java中double类型占几个字节_面试官:Java 中有几种基本数据类型是什么?各自占用多少字节?...

    认识基本数据类型 在学习基本数据类型之前,我们先认识一下这两个单词:1.bit --位:位是计算机中存储数据的最小单位,指二进制数中的一个位数,其值为"0"或"1&quo ...

  5. C语言布尔类型占几个字节,浅谈C语言中的布尔(bool)类型

    我们知道在C++里有专门的bool类型,用来表示真或假.但是在C语言里没有这样的类型(至少我是一直这么认为的),表达式的值0为假,非0为真.所以条件判断语句( if(-).while(-) )非常灵活 ...

  6. java中double类型占几个字节_java中各种数据类型占用字节数

    1字节(Byte)=8bit java的基本类型 类型 所占字节 byte 1 short 2 int 4 long 8 float 4 double 8 char 2 String中字母和汉字所占字 ...

  7. Linux 下杀毒软件 CPU 占用率为何持续升高?

    作者 | beyondma  责编 | 张文 来源 | CSDN 博客 头图 | CSDN 下载自视觉中国 最近笔者遇到这样一个相对比较疑难的事件,某个在 Linux 下运行的杀毒软件启动后,在某些情 ...

  8. java中boolean类型占几个字节

    java的基本数据类型中,boolean只有两种状态,默认值为false.取值范围是{true,false},理论上占1bit,实际上: 1.单个的boolean 类型变量在编译的时候是使用的int ...

  9. Linux 下杀毒软件 CPU 占用率为何持续升高

    作者 | beyondma  责编 | 张文 来源 | CSDN 博客 头图 | CSDN 下载自视觉中国 最近笔者遇到这样一个相对比较疑难的事件,某个在 Linux 下运行的杀毒软件启动后,在某些情 ...

最新文章

  1. 基于深度学习的目标检测综述
  2. 多线程中的指令重排问题
  3. 【C 语言】字符串模型 ( 两头堵模型 )
  4. cassandra集群搭建
  5. linux添加怎么退出,linux – 是否可以设置’expect’的退出代码
  6. 下拉多选择框 实现方式_非极大值抑制Non-Maximum Suppression(NMS)一文搞定理论+多平台实现...
  7. koa --- 使用Github OAuth登录
  8. javafx_JavaFX 2 GameTutorial第2部分
  9. java 从控制台读取_转载 java从控制台读取输入的方法
  10. 记录一次svn报错:[Previous operation has not finished; run 'cleanup' if it was interrupted] 的排错过程
  11. 在Sping Boot logback的使用
  12. 从 JavaScript 到 TypeScript
  13. Ubuntu13.04配置优化(四)转贴
  14. 面向对象19:内部类
  15. spring-boot-starter-parent和spring-boot-dependencies的作用
  16. Struts2+Spring3+MyBatis3整合以及Spring注解开发
  17. 微博中微服务缓存_微服务实践分享(5)缓存中心
  18. 同比增长率,环比增长速度、环比发展速度
  19. 英语语法 - the + 形容词 的意义
  20. 浏览器控制台Network面板简述

热门文章

  1. tp框架中引入php文件,Laravel框架及ThinkPHP框架超级简单的公共文件引入(保留变量)...
  2. 数据结构知识点总结_大牛带你学 | 考研数据结构中线性表中顺序结构的知识点总结...
  3. 二元一次方程有唯一解的条件_人教版初中数学七年级下册用适当方法解二元一次方程组公开课优质课课件教案视频...
  4. python什么软件开发好_python怎样才能学好?python软件开发什么
  5. Docker入门-架构
  6. windows下最好的C++ IDE
  7. 详解MySQL中DROP,TRUNCATE 和DELETE的区别
  8. spring cloud eureka服务注册和调用
  9. 马凯军201771010116《面向对象程序设计(java)》第二周学习总结
  10. windows进入mysql