- 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);
}
absolut 07.04.2011 17:09 # 0
gb12335 07.04.2011 17:35 # +2
TarasB 07.04.2011 18:03 # −1
absolut 07.04.2011 18:10 # +2
TarasB 07.04.2011 18:12 # 0
Lure Of Chaos 07.04.2011 20:19 # 0
Goga 07.04.2011 18:08 # +3
SIGSEGV 07.04.2011 23:48 # 0
ctm 08.04.2011 06:36 # 0
for(int i = 0; i < 1000000; i ++){
void *t = malloc(1000000);
malloc(1); // сохраним, освободим потом
free(t);
}
падает с out of memory на любой версии BCB или delphi.
Может отдельный топик стоило создать?
bugmenot 08.04.2011 07:29 # 0
падает отнюдь не от фрагментирования кучи
ctm 08.04.2011 09:44 # 0
аллокается в пике 2М байтов без учета структур менеджера памяти.
bugmenot 08.04.2011 11:38 # 0
люто жрет сотни working setа под фрагментированную кучу, но не падает
ctm 08.04.2011 12:47 # 0
void *t = malloc(1000000);
free(t);
сразу будет все нормально.
absolut 08.04.2011 08:00 # 0
ctm 08.04.2011 09:47 # 0
если больше нравится так:
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;
SIGSEGV 08.04.2011 11:50 # +1
> malloc(1000000);
Редкий суржик Си с плюсами.
ctm 08.04.2011 10:01 # 0
в исходниках для дельфи модуль System, файл getmem.inc, который в нем инклудится. SysGetMem, SysFreeMem, SysReallocMem.
absolut 08.04.2011 10:40 # +2
SIGSEGV 08.04.2011 11:49 # −1
ctm 08.04.2011 12:32 # 0
ctm 08.04.2011 12:44 # 0
в разы быстрее, чем HeapAlloc/HeapFree.
pushistic 08.04.2011 11:12 # −3
absolut 08.04.2011 12:49 # 0
pushistic 08.04.2011 13:05 # −2
bugmenot 08.04.2011 13:19 # 0
absolut 08.04.2011 14:54 # −1