热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一个大的结构数组申明为全局变量好不好.

我们公司的编码规范上说:数组不能直接定义为全局变量,只能定义为数组指针,申请动态内存。但我在代码中常见有人这样写:源文件init_table.ctypedefstruct
我们公司的编码规范上说:
数组不能直接定义为全局变量,只能定义为数组指针,申请动态内存。

但我在代码中常见有人这样写:
//源文件 init_table.c
typedef struct
{
uint8 state;
uint8 dial_role;
uint8 dial_status;
uint16 errcode;
DID_T            diaid;       //结构变量
uint8 invk_ind_count;
INVK_OP_T        invk_ind[MAX_INVOKE_NUM];  //结构数组
uint8 invk_req_count;
INVK_OP_T        invk_req[MAX_INVOKE_NUM];  //结构数组
uint8 linkid_flag;
uint8 link_id;
uint8 app_ssn;
uint8 map_peer_ssn;
uint32 app_serial_id;
uint16 app_event_id;
uint32 timer_no;
uint8 timer_type;
uint16 primitive;
uint8 count;
ADDR_T            orig_addr;    //结构变量
ADDR_T           dest_addr;    //结构变量
uint16 flink;
uint8 r11;
}DIALOG_TBL_T;

#define   MAX_DIALOG_ID            3000
DIALOG_TBL_T dialtbl[MAX_DIALOG_ID];  //这里dialtbl是个大的结构数组,其中结构还嵌套着结构,把它定义为一个全局变量,是不是不符合规范呢?那规范有什么好处呢?

如果照规范做,应该怎么做一下?
是不是动态申请:

DIALOG_TBL_T *dialtbl = (DIALOG_TBL_T *)malloc(size(DIALOG_TBL_T)*3000 + 1);

8 个解决方案

#1


我觉得不能死抠规范,某些时候这些数组的生命期确实很长,甚至跨越整个任务的生命期,并且这些数组具有公共的特性,对各个模块都有作用。这个时候声明为全局变量未尝不可。

不清楚你们公司的规范是不是针对某些平台的特殊需求进行的定义,也许只是为了限制全局变量的数量而已。

#2


尽量不要用全局的,可改的地方太多,麻烦。

#3


公司代码是跑在单板上的,可能也有这个原因!

主要是这个结构数组确实很大,结构里面又套结构,所以定义为全局变量,是不是对全局变量所存放的区域(是什么区我也不太清楚,请高人给指点一下)有影响呢?

#4


能有人再给说说吗?
结构数组很大,结构里面又套结构,定义为全局变量,是不是对全局变量所存放的区域有影响呢?

#5


我的一点初浅看法:

全局变量存放在静态数据区,malloc存放在堆空间。
一般来说,操作系统对进程的栈和静态存储区都有大小限制,而堆空间基本上只受到实际物理内存(含虚拟内存或交换区)的限制。因此,大的数据量都不要定义成全局变量。
全局变量的危害还在于破坏模块的独立性,增加模块间的耦合性。因此,一般只使用单个模块间的全局变量,而不使用多个模块都能访问的全局变量。如果万一要让多个模块共享全局变量,也尽量只让一个模块创建和写入,而其它模块只读。否则会给程序带来不稳定性,也难以维护修改。
简单的说,如果满足以下几种情况,可以使用全局变量:
1。数据量不大
2。只在一个功能模块内起作用,即“局部全局变量”,(很拗口,呵呵)
3。如果多个模块共享一个全局变量,让它只能被一个模块修改,其它只读。

否则,还是尽量放到堆栈上去,采用参数传递。

#6


完了完了,没看清楚,居然是0分帖。白忙活了半天。

#7


公司的编码规范上 是死的人是活的。
有需要当然可以做啊,不要泛滥即可

#8


hqx8211
呵呵,不要在意,我是对CSDN上的这个给分制度不太熟悉,所以我就没有给分,你的回答让我和许多人都受益了,谢谢你.争取下次我也免费回答你一个问题:)

推荐阅读
  • 在Delphi7下要制作系统托盘,只能制作一个比较简单的系统托盘,因为ShellAPI文件定义的TNotifyIconData结构体是比较早的版本。定义如下:1234 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 深入解析Android 4.4中的Fence机制及其应用
    在Android 4.4中,Fence机制是处理缓冲区交换和同步问题的关键技术。该机制广泛应用于生产者-消费者模式中,确保了不同组件之间高效、安全的数据传输。通过深入解析Fence机制的工作原理和应用场景,本文探讨了其在系统性能优化和资源管理中的重要作用。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • C语言中全部可用的数学函数有哪些?2.longlabs(longn);求长整型数的绝对值。3.doublefabs(doublex);求实数的绝对值。4.doublefloor(d ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 你的问题在于:1. 代码格式混乱,缺乏必要的缩进,导致可读性极低;2. 使用 `strlen()` 和 `malloc()` 函数时,必须包含相应的头文件;3. `write()` 函数的返回值处理不当,建议检查并处理其返回值以确保程序的健壮性。此外,建议在编写代码时遵循良好的编程规范,增加代码的可维护性和可读性。 ... [详细]
  • Python 序列图分割与可视化编程入门教程
    本文介绍了如何使用 Python 进行序列图的快速分割与可视化。通过一个实际案例,详细展示了从需求分析到代码实现的全过程。具体包括如何读取序列图数据、应用分割算法以及利用可视化库生成直观的图表,帮助非编程背景的用户也能轻松上手。 ... [详细]
  • 本文详细解析了使用C++实现的键盘输入记录程序的源代码,该程序在Windows应用程序开发中具有很高的实用价值。键盘记录功能不仅在远程控制软件中广泛应用,还为开发者提供了强大的调试和监控工具。通过具体实例,本文深入探讨了C++键盘记录程序的设计与实现,适合需要相关技术的开发者参考。 ... [详细]
  • 在Android平台中,播放音频的采样率通常固定为44.1kHz,而录音的采样率则固定为8kHz。为了确保音频设备的正常工作,底层驱动必须预先设定这些固定的采样率。当上层应用提供的采样率与这些预设值不匹配时,需要通过重采样(resample)技术来调整采样率,以保证音频数据的正确处理和传输。本文将详细探讨FFMpeg在音频处理中的基础理论及重采样技术的应用。 ... [详细]
author-avatar
Andou1983
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有