Форум программистов, компьютерный форум CyberForum.ru

Почему не заканчивается стек? - C++ Linux

Восстановить пароль Регистрация
 
sys_beginner
63 / 12 / 1
Регистрация: 10.06.2014
Сообщений: 647
Завершенные тесты: 1
07.12.2016, 19:16     Почему не заканчивается стек? #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//g++  4.9.3
 
#include <iostream>
 
#include <sys/resource.h>
 
class Cls{
    int n;
    int c;
    int b;
    int e;
    int z;
    int fo;
    int n1;
    int n2;
    int n3;
    short l1;
    short l2;
 
};
 
int main (int argc, char **argv)
{
    struct rlimit rl;
    
    int stack_limit = getrlimit(RLIMIT_STACK, &rl);
    int max_cls_count = (rl.rlim_cur / sizeof(Cls));
    
    std::cout << "Stack size is: " << rl.rlim_cur << std::endl;
    std::cout << "Cls size is " << sizeof(Cls) << std::endl;
    std::cout << "Maximum Cls objects count in stack:" << max_cls_count << std::endl;
 
    for (int i =0; i <= max_cls_count; i++){
        Cls c = Cls();
    }
    std::cout << std::endl << "No error";
 
    return 0;
}
http://rextester.com/VKPD81612

Как видно в коде на основе размера стека и объекта который в нем создается вычисляется максимальное количество объектов которые могут находится в стеке. Однако создать количество объектов, суммарный размер которых превышает размер стека все же удается и ошибок не возникает. Чего я не понимаю?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2016, 19:16     Почему не заканчивается стек?
Посмотрите здесь:

C++ Почему цикл не заканчивается???
Delphi Почему не заканчивается цикл?
C++ Linux стек
C++ Цикл почему-то не заканчивается.
C++ при работе рекурсивной функции заканчивается стек и программа соответственно; как сделать так, чтобы она писала "стек закончился"?
Почему не знает #include <security/pam_modules.h> ? C++ Linux
C++ Linux Почему не инициализируется curl сессия?
Почему не выводит текст из файла (CP1251)? C++ Linux
C (СИ) Почему не заканчивается цикл?
Почему линкер ругается ? C++ Linux

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12268 / 6955 / 782
Регистрация: 27.09.2012
Сообщений: 17,254
Записей в блоге: 2
Завершенные тесты: 1
07.12.2016, 19:22     Почему не заканчивается стек? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Например:
C++
1
2
3
    for (int i =0; i <= max_cls_count; i++){
        Cls c = Cls();//<--создался
    }//<--уничтожился
sys_beginner
63 / 12 / 1
Регистрация: 10.06.2014
Сообщений: 647
Завершенные тесты: 1
07.12.2016, 19:23  [ТС]     Почему не заканчивается стек? #3
Croessmah,
Понял, спасибо!
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12268 / 6955 / 782
Регистрация: 27.09.2012
Сообщений: 17,254
Записей в блоге: 2
Завершенные тесты: 1
07.12.2016, 19:24     Почему не заканчивается стек? #4
Так упало:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
 
#include <sys/resource.h>
 
class Cls{
    int n;
    int c;
    int b;
    int e;
    int z;
    int fo;
    int n1;
    int n2;
    int n3;
    short l1;
    short l2;
 
};
 
int main (int argc, char **argv)
{
    struct rlimit rl;
    
    int stack_limit = getrlimit(RLIMIT_STACK, &rl);
    int max_cls_count = (rl.rlim_cur / sizeof(Cls));
    
    std::cout << "Stack size is: " << rl.rlim_cur << std::endl;
    std::cout << "Cls size is " << sizeof(Cls) << std::endl;
    std::cout << "Maximum Cls objects count in stack:" << max_cls_count << std::endl;
 
    Cls c[3000000] = {};
    std::cout << std::endl << "No error";
 
    return 0;
}
http://rextester.com/BECLVQ81778

Но всё это достаточно условно.
sys_beginner
63 / 12 / 1
Регистрация: 10.06.2014
Сообщений: 647
Завершенные тесты: 1
07.12.2016, 19:28  [ТС]     Почему не заканчивается стек? #5
Croessmah,
http://rextester.com/XFSZ34370

Прибавил +20 к максимальному количеству но все равно ошибок нет. Откуда берется дополнительное место?
Yandex
Объявления
07.12.2016, 19:28     Почему не заканчивается стек?
Ответ Создать тему
Опции темы

Текущее время: 02:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru