- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
void foo()
{
#define A_LEN 32
#define B_LEN 40
void* tmp_a = malloc(A_LEN);
memset(tmp, 0, A_LEN);
void* tmp_b = malloc(B_LEN);
memset(tmp, 0, B_LEN);
/* ... тело функции ...*/
free(tmp_a);
free(tmp_b);
}
for(int i = 0; i < 1000000; i ++){
void *t = malloc(1000000);
malloc(1); // сохраним, освободим потом
free(t);
}
падает с out of memory на любой версии BCB или delphi.
Может отдельный топик стоило создать?
падает отнюдь не от фрагментирования кучи
аллокается в пике 2М байтов без учета структур менеджера памяти.
люто жрет сотни working setа под фрагментированную кучу, но не падает
void *t = malloc(1000000);
free(t);
сразу будет все нормально.
если больше нравится так:
void **p = new void*[1000000];
for(int i = 0; i < 1000000; i ++){
void *t = malloc(1000000);
p[i] = malloc(1); // сохраним, освободим потом
free(t);
}
for(int i = 0; i < 1000000; i ++) free(p[i]);
delete[] p;
> malloc(1000000);
Редкий суржик Си с плюсами.
в исходниках для дельфи модуль System, файл getmem.inc, который в нем инклудится. SysGetMem, SysFreeMem, SysReallocMem.
в разы быстрее, чем HeapAlloc/HeapFree.