使用C联盟"保留"数据空间 - 合理吗?

 弹指遮天的小指头 发布于 2023-02-11 12:06

对不起,如果标题有点歪斜,我想不出有关我的内容的简明解释!

无论如何,我们有一个嵌入式系统,可将其设置数据存储在一个小型SPI EEPROM/Flash芯片中.在一个非常基本的形式中,它是一个包含设置数据的结构,简化版本可能如下所示:

struct settings_data
{
   struct factory_data
   { // Data set at the factory
      uint32 serial_number;
      uint32 calibration;
   };
   struct user_data
   { // User-configured data follows:
      uint8  user_data_1;
      uint8  user_data_2;
      char[10]  somestring;
      // etc...
   };
 }

一切都很好,直到我们需要在_factory_data_中加上一个额外的值,此时它会移动一切.

现在,有很多方法可以解决这个问题,但是这个问题并不是要找到一个不同的方法,而是关于这个想法是否合理来填充数据结构以便在添加内容时它们不会移动:

struct settings_data
{
   union factory_union
   {
      uint8 padding[100]; // Effectively reserve 100 bytes space
      struct factory_data
      { // Data set at the factory
         uint32 serial_number;
         uint32 calibration;
      };
   };
   union user_union
   {
      uint8 padding[100]; // Effectively reserve 100 bytes space
      struct user_data
      { // User-configured data follows:
         uint8  user_data_1;
         uint8  user_data_2;
         char[10]  somestring;
         // etc...
      };
   };
 }

如果我正确理解了联合,这将在settings_data结构中保留100个字节的存储空间,并且我们添加到联合内部的"真实"数据结构中的任何新成员都不会导致联合增长,除非我们超过100个字节.

问题是,鉴于我们资源相对有限,这是实现这一目标的合理方法吗?

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有