Информация об изменениях

Сообщение gcc static переменная от 24.11.2022 5:29

Изменено 24.11.2022 6:29 maks1180

gcc static переменная
у класса есть метод, в нём объявлена static переменная, вот так
void OnReceive() {
const int BUFFER_STATIC_SIZE = 65*1024;
static char BBB[BUFFER_STATIC_SIZE];

Обычно переменная BBB не занимает место в exe.
На gcc v4.8 on Linux — всё нормально, exe не увеличивается.
На gcc v10.2 on Windows, если метод в cpp то всё нормально, но если в header, то в exe добавляется 65Кб и заполняется нулями. Но зачем ?

Это баг gcc или так и должно быть ?
Почему выделение или не выделения места в exe для BBB зависит от того в cpp или h файле реализован метод ?

Может ли перемещенние данного буфера на стек замедлить скорость работы ?
Так как адрес статической переменной фиксирован, адрес на стеке динамический.
Дополнительное вычисление адреса ?
Работа кэш памяти может быть хуже со стеком ?
gcc static переменная
у класса есть метод, в нём объявлена static переменная, вот так
void OnReceive() {
const int BUFFER_STATIC_SIZE = 65*1024;
static char BBB[BUFFER_STATIC_SIZE];

Обычно переменная BBB не занимает место в exe.
На gcc v4.8 on Linux — всё нормально, exe не увеличивается.
На gcc v10.2 on Windows, если метод в cpp то всё нормально, но если в header, то в exe добавляется 65Кб и заполняется нулями. Но зачем ?

Это баг gcc или так и должно быть ?
Почему выделение или не выделения места в exe для BBB зависит от того в cpp или h файле реализован метод ?

Может ли перемещенние данного буфера на стек замедлить скорость работы ?

Вызов call ___chkstk_ms, в начале функции для проверки есть ли место в стеке ?
Так как адрес статической переменной фиксирован, адрес на стеке динамический. Дополнительное вычисление адреса ?
Работа кэш памяти может быть хуже со стеком ?