Windows Embedded Compact 7.
Запуск приложения на 16 КБ с USB-накопителя.
В основном у меня есть функции1() и function2();
Функция1() запускает и распечатывает некоторую информацию просто отлично.
Затем программа умирает.
(Возврат к командной строке (карманный cmd v 7.00).)
Функция2 содержит декларацию вверху. Это для двухмерного массива удвоений, используемого в расчете, который фактически закомментирован в то время.
function2()
{
LARGE_INTEGER li;
double time[PRIORITY_LEVELS][ITERATIONS]; // 256 X 1000
double difference[ITERATIONS - 1] = {0};
Часть, которая не имеет смысла:
Я прокомментирую объявление для массива 2d (удаляю его) - программа запустит остальную часть содержимого функции2() правильно.
Что, возможно, проблема здесь или как я могу даже узнать?
У меня 8 ГБ оперативной памяти. Этого должно быть более чем достаточно для 256X1000 8-байтового двойника, верно?
Любая помощь приветствуется.
Вы пытаетесь выделить около 2 мегабайт пространства в стеке, что взорвало его. 1MB - приблизительный обычный размер стека (который может быть на самом деле меньше на вашей конкретной платформе, я не знаю специфики), поэтому вы не хотите выделять большие массивы там. Вместо этого вы должны купировать выделение массива, то есть:
double* time[PRIORITY_LEVELS];
for (int i = 0; i < PRIORITY_LEVELS; ++i)
{
time[i] = new double[ITERATIONS];
}
Это займет всего лишь 256 указателей на стопку, то есть 1KB, предполагая 32-битный процесс.
Тот факт, что у вас 8 ГБ ОЗУ, не имеет значения; только 2 ГБ будет адресуться вашим процессом (предполагая 32 бита), и у вас будет только 1 МБ пространства стека на поток.
double time[PRIORITY_LEVELS][ITERATIONS];
замены вашей строки double time[PRIORITY_LEVELS][ITERATIONS];
, Вам также нужно будет delete[]
все массивы, которые вы выделили с помощью new[]
иначе они будут вытекать.
std::vector<std::vector<double>> time(PRIORITY_LEVELS, std::vector<double>(ITERATIONS));
- и не беспокойтесь об утечках памяти.
у вас 8GB RAMS, но не все из них пойдут в ваш процесс
матрица слишком велика, чтобы выделяться в стеке, вместо этого попробуйте выделить ее в кучу.