当前位置:  技术问答>linux和unix

gcc字符对齐问题的研究

    来源: 互联网  发布时间:2017-03-07

    本文导语:  在一个函数的赋值语句出现赋值错误,其中data是s64  REF是s32 m_info是个结构体 ScaleData也是结构体 s64 nValue = data; m_info.ScaleData[CH].REF[format] = data; 错误信息 假设data值是160 nValue的值是对的160 但m_info.ScaleData[CH].REF[fo...

在一个函数的赋值语句出现赋值错误,其中data是s64  REF是s32 m_info是个结构体 ScaleData也是结构体

s64 nValue = data;
m_info.ScaleData[CH].REF[format] = data;

错误信息
假设data值是160
nValue的值是对的160
但m_info.ScaleData[CH].REF[format]的值就不是160了 有可能很大的值像-167117...

struct s_scale
{
 s32 DIV[SET_FORMAT_MAX + 1]; //一格多少
 s32 REF[SET_FORMAT_MAX + 1]; //参考
 u8 POS; //参考位置, 共享
};

结构体对齐方式采用1字节对齐,如果是4字节对齐则不会出现这个错误。

修改过方法:
1. m_info.ScaleData[CH].REF[format] = (s32)data;  赋值错误
2. s_scale结构体内REF DIV改成s64   赋值错误
3. memcpy(&m_info.ScaleData[CH].REF[format], &data, sizeof(s32));  赋值正确 

这是怎么回事呢?谢谢!

|
1字节对齐,可以添加填充字符,即 pad

|
s64 nValue = data;
m_info.ScaleData[CH].REF[format] = data;

struct s_scale
{
  s32 DIV[SET_FORMAT_MAX + 1]; //一格多少
  s32 REF[SET_FORMAT_MAX + 1]; //参考
  u8 POS; //参考位置, 共享
}

楼主准备将 s64 数据存储在 s32 中么?

|
看不出问题的,把变量类型都贴来。

|
有无完整代码?是哪种 cpu ?

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请研究过gcc链接器的高手帮忙!
  • Linux下GCC内置原子操作函数(多线程资源访问)介绍
  • 使用popen来执行gcc命令,如何根据读出来的gcc的输出来判断gcc是否编译成功?
  • 命令:mips_fp_le-gcc,mipsel-gcc 是什么意思?跟一般的gcc有什么区别?
  • 怎样升级我的GCC呀,我用的RH7.2,GCC 2.96 ,我从网上下载了一个gcc-3.2.3.tar.gz
  • arm-elf-gcc 和 arm-linux-gcc有什么区别?arm-elf-gcc里的elf代表什么?
  • gcc-ccore、avr-gcc及arm-gcc的区别
  • gcc在哪里?bash:gcc:command not found
  • 如何删掉GCC3.0(我需要GCC2.0-----)
  • Windows版GCC TDM-GCC
  • 急问:如何卸掉gcc 3.2庄gcc 2.96
  • 有人遇到过吗,在安装GCC时提示,"checking gcc ...no "
  • gcc编译时出错,gcc: installation problem, cannot exec `as': 没有那个文件或目录!!!求助呀呀!!!!!
  • GCC无法安装的问题,希望有人帮我( Debian 4.04ra无法安装GCC)
  • Solaris8,安装了iconv,gcc和gcclib,然后用gcc编译c程序出错。
  • 一套未安装gcc的Linux中安装gcc rpm包时时出现错误
  • gcc与arm-linux-gcc编译的问题???
  • 下了一个GCC3.0包用tar xjfv gcc-3.0.tar.bz2解压后出现一堆文
  • 请问如何安装rpm格式的gcc如gcc-3.2.2-5.src.rpm,谢谢
  • arm-linux-gcc交叉编译出错,但gcc编译没错,什么原因呢???
  • 在redhat9下,如何将gcc3.x改为gcc2.x?
  • linux x86_64下由于拷贝gcc的lib目录导致gcc编译器出错


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3