Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.218.254.122] |
|
Сообщ.
#1
,
|
|
|
Функции coreleft() и farcoreleft() почему-то говорят, что свободной памяти в куче около 60000 байт. Смена модели памяти в настройках ни к чему не приводит.
Подскажите пожалуйста в чем может быть дело. Очень надо : ) Компилер Borland C++ 3.1, ось - WinXP |
Сообщ.
#2
,
|
|
|
А можно ли в досе выделить памяти больше чем 64К?
Указатели должны быть huge |
Сообщ.
#3
,
|
|||
|
Впервые слышу о функции coreleft() 2 rodion Указатели должны быть far...
|
Сообщ.
#4
,
|
|
|
Drunkard, это все хорошо, только вот проблема в том что не получается ф-ей calloc выделить ммм... допустим 64000 байт, она ошибку возвращает. С farcalloc то же самое, с malloc, new тоже...
|
Сообщ.
#5
,
|
|
|
Странно. У меня щаз нет под рукой Багланда Ц++ 3.1 Но в древние ДОС-овские времена, точно помню - работало.
|
Сообщ.
#6
,
|
|
|
Может это из-за WinXp? Завтра буду тестить на вин98
Вот этот код нормально работает в борланд С++ 5.01, а в 3.1 нет: #include <stdio.h> #include <alloc.h> #include <iostream.h> #include <conio.h> #define NUM_PTRS 10 #define NUM_BYTES 64000 int main(void) { clrscr(); char *array[ NUM_PTRS ]; unsigned int i; for( i = 0; i < NUM_PTRS; i++ ) array[ i ] = (char *) malloc( NUM_BYTES ); if(array[0]!=NULL) { for(i=0;i<100;i++){ array[1][i]='a'; cout<<array[1][i]; } for( i = 0; i < NUM_PTRS; i ++ ) free( array[ i ] ); if( heapcheck() == _HEAPCORRUPT ) printf( "Heap is corrupted.\n" ); else printf( "Heap is OK.\n" ); getch(); } return 0; } |
Сообщ.
#7
,
|
|||||||
|
Измени три строчки - должно пройти. 1.
на char far *array[NUM_PTRS]; 2.
на array[ i ] = (char far *) farmalloc( NUM_BYTES ); 3.
на farfree( array[ i ] ); |
Сообщ.
#8
,
|
|
|
Кроме того farmalloc использует параметр
unsigned long! #define NUM_BYTES 64000L |
Сообщ.
#9
,
|
|||||||
|
В моделях large и huge все указатели по дефолту типа far.
Это преобразуется само собой компиллятором. Тема в следующем: при запуске проги в дебаге, память жрет кто? Правильно, сам Борланд! Напишем программку:
Запустим ее в пошаговом режиме. Получим 60048 или около того. Закроем Борланд, сделаем shortcut под наш exeшник, сделаем в пропертях размер памяти 640Kb, уберем галку Close on exit, и вот оно : 620016! |
Сообщ.
#10
,
|
|
|
Uncle Bob, и как это можно пофиксить? А то ведь неудобно получается...
Интересно, это из-за операционки? Тогда под ДОСом все ок должно быть |
Сообщ.
#11
,
|
|
|
Под чистым DOS естессно все будет ок. Я так понял, что Борланд 5 позволяет ДОСовский код делать - дебажь в нем. Если нет, то попробуй отдебажиться на небольших объемах данных, если это невозможно, тогда... В старом форуме по C++ висела в самом верху тема "Как работать без отладчика". Если 640К мало - выход один: Защищенный режим, ДОСовские екстенедеры для работы с XMS...
|
Сообщ.
#12
,
|
|||
|
Дядюшка Боб, человеку был предложен вариант, который не зависит от моделей памяти, будь то смалл, ларга или хуга. Если он хочет заниматься вот такой фигнёй :
То флаг ему в руки. Я в этом не участвую. |
Сообщ.
#13
,
|
|||
|
Между прочим, если ты не заметил, то именно "эта фигня" и является ответом на заданный человеком вопрос. |
Сообщ.
#14
,
|
|
|
Возможно. Но проблему она (эта фигня) не решает.
|