數組邊界檢查可以靜態執行嗎? 我認爲它只能使用靜態數組(編譯器知道大小)而不是動態數組(編譯器不知道大小)。數組邊界檢查可以靜態執行嗎?
編輯:有關C和Java及其折衷(速度與效率)的初步問題已得到解答,似乎也不清楚,因此已刪除。
謝謝
數組邊界檢查可以靜態執行嗎? 我認爲它只能使用靜態數組(編譯器知道大小)而不是動態數組(編譯器不知道大小)。數組邊界檢查可以靜態執行嗎?
編輯:有關C和Java及其折衷(速度與效率)的初步問題已得到解答,似乎也不清楚,因此已刪除。
謝謝
Ç趨於值速度高於一切,所以邊界檢查不是語言的一部分。在一般情況下,不能對所有代碼進行靜態編譯,因此運行時成本會影響性能至關重要的應用程序不希望支付的時間。
Gcc不支持插入代碼進行邊界檢查。有人有added code這樣做,但它尚未添加到官方消息。
謝謝。當你說「它不能爲所有代碼靜態完成」:只是爲了澄清,它可以做到這一點靜態數組,但不是動態數組?還是我把這一切搞混了? –
使用動態數組很難但並非不可能,因爲數組的大小需要使用靜態代碼分析技術來確定。這涉及到查看不同的代碼路徑,函數調用,循環等。不容易,分析不能總是預測變量的值或動態數組的大小。 –
你的問題到底是什麼?邊界檢查是什麼意思?如果你引用一個數組的大小,你應該閱讀Java的基礎知識。 – Turing85
是的,檢查索引是否在數組邊界內。 –
然後你應該閱讀一些關於Java的教程。 – Turing85