safebuffers

Microsoft 特定的

告知編譯器不要插入函式的緩衝區滿溢安全性檢查。

語法

__declspec( safebuffers )

備註

/GS 編譯器選項會藉由在堆疊上插入安全性檢查,讓編譯器測試緩衝區滿溢。 符合安全性檢查資格的資料結構類型會在 /GS(緩衝區安全性檢查) 說明。 如需緩衝區滿溢偵測的詳細資訊,請參閱 MSVC 中的安全性功能。

某位專業人員手動檢閱程式碼或進行外部分析後,可能會判斷函式不會發生緩衝區滿溢。 在此情況下,您可以將 關鍵字套用 __declspec(safebuffers) 至函式宣告,以隱藏函式的安全性檢查。

警告

緩衝區安全性檢查提供了重要的安全性保護,且幾乎不會對效能造成影響。 因此,除了在少數函式的效能為重要考量,以及函式已知為安全的情況以外,建議您不要抑制這些檢查。

內嵌函式

主要函 式可以使用 內嵌 關鍵字來插入次要函 式的 複本。 __declspec(safebuffers)如果關鍵字套用至函式,則會隱藏該函式的緩衝區滿溢偵測。 不過,內嵌會以下列方式影響 __declspec(safebuffers) 關鍵字。

假設兩個函式都指定了 /GS 編譯器選項,但主要函式會 __declspec(safebuffers) 指定 關鍵字。 第二個函式中的資料結構會使其進行安全性檢查,因此函式不會抑制這些檢查。 在此案例中:

  • 指定 次要函式上的 __forceinline 關鍵字,以強制編譯器內嵌該函式,而不論編譯器優化為何。

  • 因為次要函式符合安全性檢查資格,所以即使它指定 __declspec(safebuffers) 關鍵字,安全性檢查也會套用至主要函式。

範例

下列程式碼示範如何使用 __declspec(safebuffers) 關鍵字。

// compile with: /c /GS
typedef struct {
    int x[20];
} BUFFER;
static int checkBuffers() {
    BUFFER cb;
    // Use the buffer...
    return 0;
};
static __declspec(safebuffers)
    int noCheckBuffers() {
    BUFFER ncb;
    // Use the buffer...
    return 0;
}
int wmain() {
    checkBuffers();
    noCheckBuffers();
    return 0;
}

END Microsoft 特定的

另請參閱

__declspec
關鍵字
inline、__inline、__forceinline
strict_gs_check