我正在閱讀「Linux設備驅動程序」第三版。Tagged初始化是否允許重新排序結構成員?
提取物:
的scull設備驅動程序所實現的只是最重要的設備 方法。它的file_operations結構初始化如下:
struct file_operations scull_fops = { .owner = THIS_MODULE, .llseek = scull_llseek, .read = scull_read, .write = scull_write, .ioctl = scull_ioctl, .open = scull_open, .release = scull_release, };
這 聲明使用標準的C標記化的結構初始化 語法。這種語法是首選,因爲它使得驅動程序在結構定義的變化中更具可移植性,並且可以說,使得代碼更加緊湊和可讀。 標記爲 初始化允許重新排序結構成員;在某些 的情況下,實質上的性能改進已經實現了 將指針指向同一硬件中經常訪問的成員 緩存行。
我可能會誤讀它。它們是否意味着對象的最終佈局與最初的結構定義有所不同?因此無法移植?我沒有看到可行的實施建議。有人能解釋我最後一段中的建議嗎?他們是否建議另外選擇,功能在記憶中的最終位置會受到影響,並彼此接近?因此更可能在相同的緩存行中。
好的。所以,對你而言,本書建議結構定義稍後可能會改變以優化性能。本書最重要的是它不會破壞使用標記初始化的驅動程序的代碼。事實上你的解釋顯然是正確的。讀這個我的問題現在看起來很愚蠢。無論如何。謝謝。順便說一下:刪除字段可能會中斷驅動程序代碼,當它們從已標記的初始化引用已刪除的字段時,對不對? –
'刪除字段可能會破壞驅動程序代碼,當它們從標記的初始化引用已刪除的字段時,對嗎?' - 是的,它可能會中斷。 – Tsyvarev