w jednym z modułów naszej aplikacji, calloc() kończy się niepowodzeniem i zwraca NULL. Ilość pamięci, którą próbuje przydzielić, wynosi 9292 bajtów. System operacyjny to AIX 7.1 i działa VIOS 2.2.1.3.calloc nie działa i zwraca NULL
Maszyna ma pamięć RAM o pojemności 2 GB i nie wydaje się, aby wystąpił problem z brakiem pamięci. Ten sam moduł aplikacji działa dobrze na jednym z pozostałych pudełek, który ma te same konfiguracje co problematyczne pudełko. Kolejność jest fragmentem pamięci z obu pudełek i są one takie same!
PRACY BOX:
RLIMIT_AS (infinite) (infinite) RLIMIT_CORE 1073741312 (infinite) RLIMIT_CPU (infinite) (infinite) RLIMIT_DATA 134217728 (infinite) RLIMIT_FSIZE (infinite) (infinite) RLIMIT_NOFILE 2000 (infinite) RLIMIT_RSS 33554432 (infinite) RLIMIT_STACK 33554432 2147483646
problematyczne BOX:
RLIMIT_AS (infinite) (infinite) RLIMIT_CORE 1073741312 (infinite) RLIMIT_CPU (infinite) (infinite) RLIMIT_DATA 134217728 (infinite) RLIMIT_FSIZE (infinite) (infinite) RLIMIT_NOFILE 2000 (infinite) RLIMIT_RSS 33554432 (infinite) RLIMIT_STACK 33554432 2147483646
Jestem pojęcia jak naprawdę nie mogę zrozumieć dlaczego calloc() zawodzi nawet do 9292 bajtów na tym polu.
Dzięki
Może fragmentacja pamięci? Nie ma wolnego bloku na tyle dużego, aby pasował do twojego przydziału? Kiedy alokacja się nie powiedzie, sprawdź np. 'errno', aby zobaczyć, co mówi? –
Tak, myślałem tak samo, ale czy istnieje sposób, aby to udowodnić lub konkretnie o tym wiedzieć? numer błędu ENOMEM! Wyjście kratownicy pokazuje ten błąd! fragment z kratownicy na proces pokazuje ten lseek (3, 0, 1) \t \t \t \t \t = 4318 lseek (3, 0, 1) \t \t \t \t \t = 4318 lseek (3, 0, 1) \t \t \t \t \t = 4318 lseek (3, 242, 0) \t \t \t \t = 242 kread (3 "\ t K Inor V ersio" .., 4096) \t = 4096 lseek (3, 0, 1) \t \t \t \t \t = 4338 lseek (3, 222, 0) \t \t \t \t = 222 __libc_sbrk (0x00000000) \t \t \t \t Err 12 ENOMEM __libc_sbrk (0x00000000) \t \t \t \t Err 12 ENOMEM __libc_sbrk (0x00000000) \t \t \t \t Err 12 ENOMEM __libc_sbrk (0x00000000) \t \t \t \t Err 12 ENOMEM __l ibc_sbrk (0x00000000) \t \t \t \t Err # 12 ENOMEM – k2ibegin
Pokaż nam kod, w tym wywołanie 'calloc' i kod, który sprawdza jego wynik. –