大型機彙編(mainframe assembler/HLASM)之藏巧於拙

本文只說設計思想不談技術,其思想是一個老外架構師告訴我的,現在整理如下:

一般情況下,在嵌有CICS的彙編程序中,都多多少少涉及TWA(transaction work area)的概念,單從字面上就可以看出,這塊區域是在整個transaction的運行中保持有效的。現假設,TWA中存放的有很多個指針,這些指針分別指向不同的地址空間,現內存中有一塊表區域,大小爲1000字節,具體爲:

profile(200bytes) + header(300bytes) + segment1(50bytes)+ segment2(50bytes) + ... + segment10(50bytes)

憑直覺,在設計階段我們會在TWA中存放一個指針PTRPROF,來指向這塊區域(即profile的首地址),然後通過+300取header,再+(n-1)*50來取segmentn。

但實際情況是,架構師設計了2個指針:PTRPROF(指向profile)和PTRHAEAD(指向header)。

當時本人翻譯有關這塊內存空間的彙編代碼時,就有點不能理解。得到的答覆是:

Most likely, they designed the pointers based on how seldom or how frequent a particular address is used. If they only have the PTRPROF, and if they need to get the HEADER (300 bytes) then they need to do some manipulation or calculation to get the real address or displacement of the HEADER data.

本人感悟,畢竟在內存中建立這個表的目的肯定是爲了讀寫此表中的數據,就從業務上講,讀取profile(200bytes)的請求肯定遠遠小於讀表中數據的操作。如果只設計一個指針,那就是絕大部分情況下都要先+200然後再進行讀寫操作,這在效率上肯定沒有建兩個指針好,況且後者的開銷也只是多用了四個字節的內存空間而已。

本文最後涉及到了效率,下文談談彙編中效率的個人見解,謝謝!


有疑問請聯繫QQ349106216


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章