safebuffers

Блок, относящийся только к системам Майкрософт

Указывает компилятору не вставлять проверки безопасности на переполнение буфера для функции.

Синтаксис

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

Завершение блока, относящегося только к системам Майкрософт

См. также

__declspec
Ключевые слова
inline, __inline, __forceinline
strict_gs_check