当前位置:首页 > 抹茶APP下载 > 正文

[编制程序好风气] 复用代码以普及可保护性币小哥

[编制程序好风气] 复用代码以普及可保护性币小哥

  代码复用在软硬件开拓中生存两个档次xch矿机。第一个档次是,在安排一个新的软硬件功效或是开拓一个新的名目时,复用已生存的软硬件模块,这种复用大概称之为安排复用更好。另一个档次是,步调员在开拓一个软硬件模块时,模块的里面应尽大概地复用。从编制程序风气的观点来看,这边指的是后者。

  此刻假如生存一个双向链表(double-linked list, dll)的一个模块,即使这个模块在开拓的进程中,仍旧生存了两个因变量,辨别是dll_push_tail()和dll_pop_head(),这两个因变量的效率辨别是将一个新的节点介入到链表的尾部以及从链表中简略并返回顾节点xch矿机。其代码实行如图1所示。

  dll.c

  00088: void dll_push_tail (dll_t *_p_dll, dll_node_t *_p_node)

  00089: {

  00090: if (0 ==_p_dll->tail_) {

  00091: _p_dll->head_ = _p_dll->tail_ = _p_node;

  00092: _p_node->next_ = _p_node->prev_ = 0;

  00093: }

  00094: else {

  00095: dll_node_t *p_tail = _p_dll->tail_;

  00096:

  00097: p_tail->next_ = _p_node;

  00098: _p_node->prev_ = p_tail;

  00099: _p_node->next_ = 0;

  00100: _p_dll->tail_ = _p_node;

  00101: }

  00102:

  00103: _p_dll->count_ ++;

  00104: }

  00105:

  00106: dll_node_t *dll_pop_head (dll_t *_p_dll)

  00107: {

  00108: dll_node_t *p_node = _p_dll->head_;

  00109:

  00110: if (p_node != 0) {

  00111: _p_dll->count_--;

  00112: _p_dll->head_ = p_node->next_;

  00113: if (0 ==_p_dll->head_) {

  00114: _p_dll->tail_ = 0;

  00115: }

  00116: else {

  00117: p_node->next_->prev_ = 0;

  00118: }

  00119: }

  00120:

  00121: return p_node;

  00122: }

  即使此时须要减少一个新的链表操纵因变量dll_merge(),用来兼并两个链表xch矿机。则这个因变量的实行大概如图2所示。其思绪也很大略,即是从_p_src链表中将一个个的节点掏出并放到_p_dest链表的尾部。

  dll.c

  00165: void dll_merge (dll_t *_p_dest, dll_t *_p_src)

  00166: {

  00167: dll_node_t *p_node = _p_src->head_;

  00168:

  00169: while (0 != p_node) {

  00170: if (0 ==_p_dest->tail_) {

  00171: _p_dest->head_ = _p_dest->tail_ = p_node;

  00172: _p_dest->next_ = _p_dest->prev_ = 0;

  00173: }

  00174: else {

  00175: dll_node_t *p_tail = _p_dest->tail_;

  00176:

  00177: p_tail->next_ = _p_dest;

  00178: _p_dest->prev_ = p_tail;

  00179: _p_dest->next_ = 0;

  00180: _p_dest->tail_ = _p_dest;

  00181: }

  00182:

  00183: _p_dest->count_ ++;

  00184: p_node = p_node->next_;

  00185: }

  00186:

  00187: _p_src->count_ = 0;

  00188: _p_src->head_ = 0;

  00189: _p_src->tail_ = 0;

  00190: }

  有题目吗?从功效性的观点来说没有题目,然而从可保护性上面来看,这一实行并不好,取而代之的更好实行是经过代码复用的办法,如图3所示xch矿机。

  dll.c

  00175: void dll_merge (dll_t *_p_dest, dll_t *_p_src)

  00176: {

  00177: dll_node_t *p_node = dll_pop_head (_p_src);

  00178:

  00179: while (0 != p_node) {

  00180: dll_push_tail (_p_dest, p_node);

  00181: p_node = dll_pop_head (_p_src);

  00182: }

  00183: }

  明显,沿用代码复用的办法,其可读性更好,也更简单保护xch矿机。在实行一个软硬件模块时,该当商量从所需实行的功效中抽掏出少许大众的基础因变量(比方,这边提出的dll_pop_head()和dll_push_tail()),且那些因变量所实行的功效是正交的(即功效没有臃肿)。接下来,其它的功效(比方这边提出的dll_merge())不妨商量沿用搭积木的办法,经过应用那些最基础的因变量去实行。

  须要提防的是,沿用复用办法实行的dll_merge()引入了因变量挪用,而因变量的挪用由于生存参数的传播大概会带来确定的处置器开支,其开支的巨细与处置器的处置本领相关xch矿机。然而,对于新颖的大多处置器来说,这种开支都是很小的,且小到不妨简直忽视不计。其余,即使要去除因变量挪用所带来的开支,不妨商量沿用inline的办法。拿这边的dll_merge()的实行为例,即使dll_push_tail()和dll_pop_head()被设置为inline的话,则dll_merge()中挪用这两个因变量就实足不生存因变量挪用的开支了

  这个是搜集讲堂的免费地方,大师不妨去参考一下xch矿机。

发表评论

  • 72人参与,6条评论
  • 币安官网 于 2021-05-22 10:22:52  回复
  • 币安机器人,,?把我踢出去怎样
  • 破戒凝荷 于 2021-05-22 11:45:01  回复
  • 是啊,那个时候国家不管,到处都能挖矿。
  • 欧易OKEx行情 于 2021-05-22 14:49:22  回复
  • 我现在是老实了,大部分资金都在火币DdFi投资获利
  • 泄矢含含 于 2021-05-22 14:49:22  回复
  • 币圈就是自由市场,也许会被打压,但是绝对不会消亡
2002-2020 抹茶交易所平台版权所有 TXT地图 HTML地图 XML地图