c/c++开发分享结构填充是否可以由用户代码安全使用?

假设我有一个如下所示的结构:

struct Struct { char Char; int Int; }; 

sizeof( int )大于1并且编译器为Char成员变量添加填充 – 编译器生成的代码是否允许更改填充字节的值?

我的意思是,如果我使用指针运算并将一些数据写入Char成员变量周围的填充字节,然后执行variable.Char =赋值,编译器生成的代码是否也可能会覆盖某些填充字节?

    以下句子是错误的 :不,它不会覆盖填充字节。 但使用它可能不是一个好习惯。 如果需要,可在其中添加成员变量。

    我根据评论指出( 正确 )我是愚蠢的:

    C标准有一个“附件J”,其中J.1部分未指明行为 。 它说,“在结构或联合中存储值时填充字节的值”。 这意味着编译器可以生成它想要将数据写入结构的任何指令,这可以允许它在成员之后覆盖填充。

    如果编译器足够聪明以使用单词写入来保存字符怎么办? 您精心保存的数据将丢失。 😉

    你肯定可以在那里写一些东西,并且memset an这样的结构的实例就是这样。 但是,这样做并不安全,绝不是一个好主意 。 有一天,另一个开发人员将#pragma放在某处或者将一个成员添加到struct声明中,并且你的代码会以许多奇怪和奇特的方式爆炸,这可能需要很长时间才能进行调试。

    这样做的唯一原因就是插件可以欺骗主机应用程序来存储额外的数据。

    不要这样做,因为在未来的某个时刻它破裂,这对所有相关人员来说都是一个严重的问题。

      以上就是c/c++开发分享结构填充是否可以由用户代码安全使用?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(猴子技术宅)。

      本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/545824.html

      发表评论

      电子邮件地址不会被公开。 必填项已用*标注