C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Размер кучи(Heap)?
Артем
Отправлено: 02.04.2004, 13:41


Не зарегистрирован







Подскажите, пожалуйста, как узнать размер кучи, доступной из программы?
Георгий
Отправлено: 03.04.2004, 00:09


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



тебе 2гига мало??
в защищенном режиме с включённой подкачкой никто тебе не скажет реальный размер кучи — только занятый, тобою же...

посмотри в хелпе heapwalk — там даже пример есть.
CODE
#include <stdio.h>
#include <alloc.h>

#define NUM_PTRS  10
#define NUM_BYTES 16

int main( void )
{
  struct heapinfo hi;
char *array[ NUM_PTRS ];
  int i;

  for( i = 0; i < NUM_PTRS; i++ )
     array[ i ] = (char *) malloc( NUM_BYTES );

  for( i = 0; i < NUM_PTRS; i += 2 )
     free( array[ i ] );

  hi.ptr = NULL;
  printf( "   Size   Status\n" );
  printf( "   ----   ------\n" );
  while( heapwalk( &hi ) == _HEAPOK )
  printf( "%7u    %s\n", hi.size, hi.in_use ? "used" : "free" );

  return 0;
}
klen
Отправлено: 03.04.2004, 00:10


Машинист паровоза

Группа: Участник
Сообщений: 239



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

Короче че я распинаюсь — в хелпе черным по белому, раздел Memory Management Functions, там описание функций

CopyMemory
FillMemory
GetProcessHeap
GetProcessHeaps
GlobalAlloc
GlobalDiscard
GlobalFlags
GlobalFree
GlobalHandle
GlobalLock
GlobalMemoryStatus
GlobalReAlloc
GlobalSize
GlobalUnlock
HeapAlloc
HeapCompact
HeapCreate
HeapDestroy
HeapFree
HeapLock
HeapReAlloc
HeapSize
HeapUnlock
HeapValidate
HeapWalk
IsBadCodePtr
IsBadHugeReadPtr
IsBadHugeWritePtr
IsBadReadPtr
IsBadStringPtr
IsBadWritePtr
LocalAlloc
LocalDiscard
LocalFlags
LocalFree
LocalHandle
LocalLock
LocalReAlloc
LocalSize
LocalUnlock
MoveMemory
VirtualAlloc
VirtualAllocEx
VirtualFree
VirtualFreeEx
VirtualLock
VirtualProtect
VirtualProtectEx
VirtualQuery
VirtualQueryEx
VirtualUnlock
ZeroMemory

Тут Вы все найдете.
Удачи.
klen
Отправлено: 03.04.2004, 00:19


Машинист паровоза

Группа: Участник
Сообщений: 239



2_Георги поразительно, сообщения писали одновременно, отправили с разницой в 1 секунду.

Мне, мне, мне...... 2 гигов мало, а еще мне мало того что new не умеет разместить VCL объект в НУЖНОЙ мне куче, и по НУЖНОМУ МНЕ адресу, а умеет только в куче по умолчанию и где его пятая нога захочет, в отличие от него, я ручками это сделать умею. Поэтому и надо знать как это все работает. Бидер не добрый фей который прилетит и пиражками накормит, бидер — набор заготовок, с которых заусенцы еще снять надо напильником.

Мало кому это знать надо, но кому надо — это бывает смертельно надо знать.
Во как! сам придумал

Удачи.

Отредактировано klen — 03/04/2004, 01:59
Артем
Отправлено: 05.04.2004, 05:12


Не зарегистрирован







Спасибо...

Вернуться в Вопросы программирования в C++Builder