41 / 41 / 11
Регистрация: 02.04.2016
Сообщений: 313
1

Почему нельзя выделить статически кусок в ~100 MB?

25.11.2016, 20:19. Показов 2142. Ответов 42
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть код
Кликните здесь для просмотра всего текста
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
40
#include <iostream>
using namespace std;
enum {
    length = 256,
    count = 50
};
struct Town {
    char name[length] = {};
 
    int nStadium;
    struct {
        char type[length] = {};
        char track[length] = {};
        int nGames;
        char games[count][length] = {};
        int capacity;
    } stadiums[count];
 
    int nPool;
    struct {
        int size;
        int nGames;
        char games[count][length] = {};
    } pools[count];
 
    int nGym;
    struct {
        char type[length];
        int nGames;
        char games[count][length] = {};
    } gyms[count];
};
 
int main() {
    int nTowns;
    Town towns[count];
 
    cout << sizeof(towns);
    return 0;
}


При попытке запустить программу в дебаге, среда ловит ошибку сегментации, на функции main (CLion, MinGW, Windows 7).

Объясните пожалуйста, почему, при наличии 4 GB памяти, это происходит? Неужели память настолько фрагментирована, что целого куска в 100 MB не найдётся (один объект весит ~2 MB)?

Если действительно настолько память фрагментирована, то что можно сделать? (Кроме динамического распределения, его я ещё на рассматриваю).
Миниатюры
Почему нельзя выделить статически кусок в ~100 MB?  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.11.2016, 20:19
Ответы с готовыми решениями:

Почему нельзя банально выделить текст в паскале?
Почему нельзя банально выделить текст в паскале?

Как выделить кусок от символьного поля?
Здравствуйте, помогите, пожалуйста с проблемой: в ячейке А1 есть надпись , например &quot;поле 411&quot;...

Выделить жирным кусок текста в MsWord.
Вообщем создаю таблицу в MsWord 2007. Дальше записываю в её ячейку текст. Так вот часть этого...

В верстке совместимо с бутстрапом выделить большой кусок текста
Всем привет, Подскажите, пожалуйста, как можно в верстке совместимо с бутстрапом выделить большой...

42
277 / 226 / 93
Регистрация: 27.06.2016
Сообщений: 639
28.11.2016, 11:55 41
Author24 — интернет-сервис помощи студентам
Убежденный,
В TestStack объект foo находится в стеке по адресу 'ebp-4'. В TestHeap в стеке по адресу
'ebp-8' лежит адрес foo, выделенного в куче. Подчеркиваю: адрес foo, а не адрес адреса foo.
Это противоречит твоему утверждению, что "локальная переменная, являющаяся указателем в кучу -
это адрес, по которому хранится адрес значения".
Не противоречит, именно это и имелось в виду - переменная преобразуется по сути в адрес (В данном случае ebp-i), следовательно, переменная, хранящая адрес является адресом адреса. Тем не менее, спасибо за примеры, не знал, хотя и не был уверен в обратном, что инструкции выполняются за одно и то же количество тактов несмотря на доп. разыменование.
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
28.11.2016, 12:00 42
Цитата Сообщение от alex white Посмотреть сообщение
хотя и не был уверен в обратном, что инструкции выполняются за одно и то же количество тактов несмотря на доп. разыменование.
Кстати, я не возьмусь утверждать, что здесь быстрее - lea или mov.
Это пусть эксперты по ассемблеру подскажут.
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,516
28.11.2016, 14:36 43
Цитата Сообщение от Убежденный Посмотреть сообщение
что здесь быстрее - lea или mov.
на современных камнях, и то и другое один такт
на lea так же реализуют быстрое умножение
0
28.11.2016, 14:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.11.2016, 14:36
Помогаю со студенческими работами здесь

Почему нельзя командой copy скопировать системные файлы на дискету? Почему?
Пожалуйсат, подскажите, весь интернет перерыла, вот почему нельзя? что нельзя знаю, а по какой...

На рабочем столе нельзя перетаскивать ярлыки, нельзя копировать файлы и нельзя их вставлять
После загрузки компьютера вылезла ошибка, что кокойто файл windows неможет прочесть было предложено...

Почему не работает этот кусок программы?
Дана цепочка 00000101001010 она записана в массив, каждая цифра отдельный элемент. нужно...

Почему 100.6 - Int(100.6) = 0.59999999999999432
100.6 - Int(100.6) = 0.59999999999999432 Ну ведь не должно так быть?! 100.6 - Math.Floor(100.6)...

Нельзя преобразовать тип array [0.100] of real к integer. как исправить?
program ex_1; uses crt; var E,Ey,Ex:array of real; z,x,y,q:array of real; N,i:integer; {x -...

Если отключают интернет то нельзя зайти на сервер по 192.168.0.100
Здравствуйте уважаемые эксперты! Проблема в следующем - Отключают интернет и пользователи не могут...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru