Труд вопреки насмешкам
|
|
1 | |
Выделить под программу максимум памяти29.10.2018, 12:32. Показов 8315. Ответов 42
Метки нет (Все метки)
У меня присутствует такая ошибка компилятора:
fatal error C1060: компилятору не хватает размера кучи Я так понимаю, что программе не хватает памяти. Хотя на компьютере ее хватает - 8 ГБ ОЗУ + 50 ГБ файл подкачки на съемном диске. Как заставить программу использовать этот объем по максимуму? Компилировать только под x64, я правильно понял? У меня новейшая версия Windows и Visual Studio.
0
|
29.10.2018, 12:32 | |
Ответы с готовыми решениями:
42
Можно ли в С++ выделить память под объект в заданную мной область памяти? Выделение памяти под массив в классе. Почему не могу правильно выделить? Выделить в памяти 1024 ячейки по 8 байт и вывести их адреса(МИНИ менеджер памяти)) 1.Написать программу, вычисляющую размер памяти, отводимой компилятором под тип int |
12079 / 8388 / 1281
Регистрация: 21.01.2016
Сообщений: 31,601
|
|
29.10.2018, 14:28 | 21 |
0
|
Труд вопреки насмешкам
|
|
29.10.2018, 14:33 [ТС] | 22 |
Пример:
Код
Тип : Т = Число Т : А = 3.14159 Т = Целое q::Сейчас А=3 Т = Строка q::Сейчас А="3" Вообще-то это раздел по C++, а не по DCASTF... Так не знаете, как исправить эту ошибку?
0
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|
29.10.2018, 14:39 | 23 |
Да, ну можно и х86 там есть свои уловки, если для Виндовс, но проще х64
Почитайте о виртуальной памяти и как она работает в ОС
0
|
165 / 108 / 57
Регистрация: 30.08.2018
Сообщений: 357
|
|
29.10.2018, 14:48 | 24 |
0
|
165 / 108 / 57
Регистрация: 30.08.2018
Сообщений: 357
|
|
29.10.2018, 14:55 | 26 |
deleted
0
|
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,888
|
|
29.10.2018, 15:08 | 27 |
Компилятору нужно память под переменные распределить. Если у вас несколько статических массивов по мегабайту он может сообразить что стека не хватит.
0
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|
29.10.2018, 15:11 | 28 |
0
|
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,888
|
|
29.10.2018, 15:45 | 29 |
Да кто его знает. В первом посте да, куча. Но ТС не желает делиться подробностями, так что может быть что угодно. Вообще-то 4 ГБ для компиляции одного файла - многовато как-то. Может он там шаблоны зациклил как-то или статический анализатор запустил.
Добавлено через 46 секунд Для ТСа важно что увеличением памяти его проблема скорее всего не решится. Явно же какая-то ошибка в исходном коде.
0
|
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
|
|
29.10.2018, 16:03 | 31 |
COKPOWEHEU, у Etyuhibosecyu пропущена важная вещь - конструкция
if constexpr() , без которой рекурсивное раскрытие шаблона нельзя заблокировать. А конструкция эта поддерживается только в С++17, и видимо у автора темы в проекте не поддерживается. А без неё нужно перебор типов писать вручную, т.к. иным способом блокировать компиляцию вызова функции в шаблоне, вероятно, нельзя никак.Добавлено через 2 минуты Исходный код здесь - Преобразовать std::vector в массив параметров Добавлено через 5 минут Имеется в виду внутри switch'а 1-го аргумента switch'и для 2 аргумента, внутри каждого switch'а 2-го аргумента - switch'и для 3го и т.д. На сколько у автора копипасты хватит. А мой код просто это генерирует, правда за счёт рекурсивных вызовов шаблона функции.
0
|
Труд вопреки насмешкам
|
||||||
29.10.2018, 16:06 [ТС] | 32 | |||||
TRam_, у меня Visual Studio 2017, добавил эту конструкцию, теперь такой код:
0
|
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
|
||||||
29.10.2018, 16:12 | 33 | |||||
https://stackoverflow.com/ques... -2017-15-3
Добавлено через 36 секунд И начни не с 10 аргументов, а с 3. Добавлено через 58 секунд И наверно
0
|
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
|
|
29.10.2018, 16:33 | 35 |
Искать иной способ, мой не подойдёт.
0
|
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,888
|
|
29.10.2018, 16:33 | 36 |
Не путайте. Это выдранный непонятно откуда кусок, который даже не компилируется. В основном компилятор ругается на HMODULE, который нигде не объявлен:
ругань gcc
Код
$ g++ main.c main.c:3:64: error: ‘HMODULE’ was not declared in this scope template<int current_level, typename... T> static int func(HMODULE h, const char *fname, const std::vector<three_values> ¶meters, T... args) { ^~~~~~~ main.c:3:75: error: expected primary-expression before ‘const’ template<int current_level, typename... T> static int func(HMODULE h, const char *fname, const std::vector<three_values> ¶meters, T... args) { ^~~~~ main.c:3:94: error: expected primary-expression before ‘const’ late<int current_level, typename... T> static int func(HMODULE h, const char *fname, const std::vector<three_values> ¶meters, T... args) { ^~~~~ main.c:3:140: error: expected primary-expression before ‘...’ token int func(HMODULE h, const char *fname, const std::vector<three_values> ¶meters, T... args) { ^~~ main.c:3:148: error: expression list treated as compound expression in initializer [-fpermissive] int func(HMODULE h, const char *fname, const std::vector<three_values> ¶meters, T... args) { ^ main.c:3:150: error: expected ‘;’ before ‘{’ token int func(HMODULE h, const char *fname, const std::vector<three_values> ¶meters, T... args) { ^ main.c:74:21: error: ‘int func’ redeclared as different kind of symbol static int func(HMODULE h, const char *fname, const std::vector<three_values> ¶meters) { ^~~~~~~ main.c:3:64: note: previous declaration ‘template<int current_level, class ... T> int func<current_level, T ...>’ template<int current_level, typename... T> static int func(HMODULE h, const char *fname, const std::vector<three_values> ¶meters, T... args) { ^~~~~~~ main.c:74:21: error: ‘HMODULE’ was not declared in this scope static int func(HMODULE h, const char *fname, const std::vector<three_values> ¶meters) { ^~~~~~~ main.c:74:32: error: expected primary-expression before ‘const’ static int func(HMODULE h, const char *fname, const std::vector<three_values> ¶meters) { ^~~~~ main.c:74:51: error: expected primary-expression before ‘const’ static int func(HMODULE h, const char *fname, const std::vector<three_values> ¶meters) {
0
|
Труд вопреки насмешкам
|
|
29.10.2018, 16:38 [ТС] | 37 |
TRam_, теперь ошибки нет? Не подскажете, как сделать, чтобы программа использовала больше памяти и поддерживала большее число аргументов?
P. S. Не хотите в список друзей?
0
|
Rius
|
29.10.2018, 17:12
#38
|
0
|
12079 / 8388 / 1281
Регистрация: 21.01.2016
Сообщений: 31,601
|
|
29.10.2018, 17:55 | 39 |
Etyuhibosecyu, на самом деле, тут галимая "проблема X-Y". Т.е. вы придумали неправильное решение (Y) неозвученной проблемы (X).
Если это - реакция на моё замечание о том, что ваш DCASF должен предоставлять клиентскому коду возможность вызывать любые функции любых DLL, то решение выглядит максимально кривым. Вы в одном коде смешали систему типов С++ и своего изобретаемого языка. Вам достаточно напихать все аргументы в стёк. Знать их типы вам не надо, только значения, размеры и порядок добавления в стёк. Тоже самое с возвращаемым значением. О этих типах должен знать только код транслируемого языка. А у вас всё в кучу. И что за наркоманская система типов? "Число" - double, а "Целое" - long int. Т.е. целое нифина не число? Я вам уже говорил о том, что вам код вашего языка нужно транслировать во внутреннее представление и уже его исполнять. Я рекомедую закрыть тему, ибо тут обсуждается решение проблемы возникшее при совершенно кривом и костыльном решении другой проблемы.
0
|
Труд вопреки насмешкам
|
|
29.10.2018, 18:47 [ТС] | 40 |
Окей, закрываю тему. Обсуждение других вариантов решения здесь.
0
|
29.10.2018, 18:47 | |
29.10.2018, 18:47 | |
Помогаю со студенческими работами здесь
40
Как узнать сколько памяти в можно выделить под текстуры в мобильном устройстве? Максимум памяти одной планки памяти для P5K выделить максимум Распределение оперативной памяти выделенной под программу Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |