Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ под Linux

Войти
Регистрация
Восстановить пароль
 
Undisputed
183 / 114 / 27
Регистрация: 10.06.2014
Сообщений: 1,500
Завершенные тесты: 3
#1

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

07.12.2016, 19:16. Просмотров 426. Ответов 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
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

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

при работе рекурсивной функции заканчивается стек и программа соответственно; как сделать так, чтобы она писала "стек закончился"? - C++
Сабж g++ 4.5.0

Почему не заканчивается цикл? - Delphi
ребята что-то сделал не так помогите понять что именно procedure TForm1.Button1Click(Sender: TObject); var k,n,j,i:byte; ...

Почему не заканчивается цикл? - C (СИ)
При вводе нужного предложения и символа ставлю чтобы i=49, так как считаю, что при следующем заходе работа цикла прекратится. Пробовал...

Почему цикл не заканчивается??? - C++
Всем добрый день! У меня здесь вопрос по циклу while. Вот программа по подсчёту букв и сочетаний в тексте: #include &lt;iostream&gt; ...

Цикл почему-то не заканчивается. - C++
Значит идея такая пока не сгенерируется число =2 цикл будет повторяться. Но когда число =2 цикл все равно не заканчивается. Подскажите...

Почему программа заканчивается? - C++
Напишите программу, в которой функция fprintf() используется для создания файла инвентарной описи, содержащей сведения о наименовании...

4
Croessmah
Ушел
13769 / 8019 / 924
Регистрация: 27.09.2012
Сообщений: 19,741
Записей в блоге: 3
Завершенные тесты: 1
07.12.2016, 19:22 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Например:
C++
1
2
3
    for (int i =0; i <= max_cls_count; i++){
        Cls c = Cls();//<--создался
    }//<--уничтожился
1
Undisputed
183 / 114 / 27
Регистрация: 10.06.2014
Сообщений: 1,500
Завершенные тесты: 3
07.12.2016, 19:23  [ТС] #3
Croessmah,
Понял, спасибо!
0
Croessmah
Ушел
13769 / 8019 / 924
Регистрация: 27.09.2012
Сообщений: 19,741
Записей в блоге: 3
Завершенные тесты: 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

Но всё это достаточно условно.
0
Undisputed
183 / 114 / 27
Регистрация: 10.06.2014
Сообщений: 1,500
Завершенные тесты: 3
07.12.2016, 19:28  [ТС] #5
Croessmah,
http://rextester.com/XFSZ34370

Прибавил +20 к максимальному количеству но все равно ошибок нет. Откуда берется дополнительное место?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.12.2016, 19:28
Привет! Вот еще темы с ответами:

не понимаю почему цикл не заканчивается - C++
Привет! Вот написал. Объясните, пожалуйста, почему цикл не заканчивается? Функция должна считывать инфу и записывать в массив! Идеи по...

Почему notify не заканчивается без synchronized? - Java SE
Здравствуйте. Дан код public class exer21 { public static void main(String args) throws InterruptedException { ...

Почему распечатка не заканчивается одной строкой? - C++
#include &lt;cstdio&gt; #include &lt;cstdlib&gt; #include &lt;iostream&gt; using namespace std; int main(int nNumberofArgs, char* pszArgs) { ...

Почему переполняется стек - Prolog
Написал программу, но не пойму почему переполняется стек. Суть программы - возведение в степень ч/з сложения. predicates ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru