Sdílet prostřednictvím


safebuffers

Konkrétní společnosti Microsoft

Říká kompilátoru nelze vložit kontroly zabezpečení přetečení vyrovnávací paměti pro funkci.

__declspec( safebuffers )

Poznámky

/GS Volba kompilátoru způsobí, že kompilátor test přetečení vložením kontroly zabezpečení v zásobníku.Typy datových struktur, které jsou způsobilé pro kontroly zabezpečení jsou popsány v /GS (Kontrola zabezpečení vyrovnávací paměti).Další informace o zjišťování přetečení vyrovnávací paměti viz Kompilátor zabezpečení kontroly v hloubku na webu MSDN.

Externí analýzy nebo Přehled odborných ruční kódu aplikace může určit funkce je bezpečné z přetečení vyrovnávací paměti.V takovém případě můžete potlačit kontrol zabezpečení funkce použitím __declspec(safebuffers) klíčové funkce prohlášení.

Poznámka k upozorněníUpozornění

Vyrovnávací kontroly zabezpečení poskytují důležité zabezpečení ochrany a mají zanedbatelný vliv na výkon.Doporučujeme proto, že je Nepotlačovat, s výjimkou ve vzácných případech, kdy výkon funkce je důležité se týkají a funkce je známa bezpečné.

Vložené funkce

A primární funkci můžete použít inlining klíčové slovo vložit kopii sekundární funkce.Pokud __declspec(safebuffers) klíčové slovo je použita funkce, funkce je potlačena detekci přetečení vyrovnávací paměti.Však inlining vliv __declspec(safebuffers) klíčové slovo následujícími způsoby.

Předpokládejme, že /GS je zadán parametr kompilátoru pro obě funkce, ale určuje primární funkci __declspec(safebuffers) klíčové slovo.Datové struktury v sekundární funkce proveďte kontrol zabezpečení a funkce neskrývá těchto kontrol.V tomto případě:

  • Zadat __forceinline klíčové slovo sekundární funkci vynucení kompilátoru vložené, který fungovat bez ohledu na optimalizaci kompilátoru.

  • Protože je sekundární funkce zabezpečení kontrol, kontrol zabezpečení jsou také použity primární funkce přestože Určuje, __declspec(safebuffers) klíčové slovo.

Příklad

Následující kód ukazuje způsob použití __declspec(safebuffers) klíčové slovo.

// 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;
}

Konec konkrétní společnosti Microsoft

Viz také

Referenční dokumentace

__declspec

Klíčových slov jazyka C++

vložené, __inline, __forceinline

strict_gs_check