C++ Academy
@cpluspluc
32 1.1K
C тоже умеет автоматическую очистку ресурсов. Просто почти никто об этом не знаетdefer как в Go. Поэтому код с ресурсами часто превращается в набор goto cleanup, ручных free() и риска забыть освободить память на одной из веток.__attribute__((cleanup)).
void autofree(void *p) {
free(*(void **)p);
}
#define auto __attribute__((cleanup(autofree)))
int main() {
auto char *buf = malloc(1024);
// buf будет автоматически освобождён
// при выходе из scope
return 0;
}
main().__attribute__((constructor))main().
Одно слово в C, которое может ускорить ваш циклrestrict.restrict компилятор обязан быть осторожным. Он не знает, могут ли a, b и result указывать на один и тот же участок памяти. Поэтому он не всегда может агрессивно оптимизировать код.restrict ситуация меняется:
void add_arrays(int *restrict a,
int *restrict b,
int *restrict result,
int n)
{
for (int i = 0; i < n; i++)
result[i] = a[i] + b[i];
}
Курс «Git Pro: от первого коммита до уровня senior» - на Stepik
Инженеры Яндекс 360 каждый день строят высоконагруженные отказоустойчивые и масштабируемые системы, которые выдерживают больше 1 000 000 RPS: Диск, Телемост, Почту и другие цифровые сервисы.
Платформа использует файлы cookie для авторизации и сохранения настроек. Продолжая работу, вы соглашаетесь с нашей Политикой использования cookie.