Я знаю, что это не ново, но недавно я столкнулся с темой функции GCC __builtin_object_size (). В том, что я прочитал из документации , говорится, что предполагаемое использование может быть следующим:
Предполагаемое использование может быть, например,
#undef memcpy
#define bos0(dest) __builtin_object_size (dest, 0)
#define memcpy(dest, src, n) \
__builtin___memcpy_chk (dest, src, n, bos0 (dest))
char *volatile p;
char buf[10];
/* It is unknown what object p points to, so this is optimized
into plain memcpy - no checking is possible. */
memcpy (p, "abcde", n);
... // more codes
Есть ли преимущество в том, чтобы напрямую использовать его на уровне исходного кода вместо включения флага D_FORTIFY_SOURCE при компиляции? Есть ли на самом деле примеры из реальной жизни, которые выигрывают от использования __builtin_object_size ()?