już kminie malloc pryzmuje liczbę bajtów, a nie bitów, a co do ilości jestem ograniczany tym co jest akurat wolne na konkretnym sprzęcie
tak, ale nie chodzi tylko o pamięć RAM i wcale nie jest to takie różne na każdym komputerze
aplikacje mają przydzieloną pamięć wirtualną
pamięć wirtualna likwiduje problemy z fragmentacją pamięci fizycznej - normalnie gdyby odpalono program zajmujący 1GB, potem 2GB, a potem zwolniono ten pierwszy program to wprawdzie zostało by 2GB wolnej pamięci ale byłaby ona podzielona na dwie części - jedna na początku, druga na końcu
przez takie coś niemożliwe byłoby zaalokowanie ciągłego bloku pamięci - trzeba by było pamiętać że blok (czy tablica) się kończy w danym miejscu i od tego miejsca trzeba przeskoczyć do innego - to komplikuje program
problem ten ma rozwiązać pamięć wirtualna - każda aplikacja 32 bitowa dostaje "wirtualne" 4GB niby do użytku w całości dla siebie i w numeracji liniowej od zera
dostaje 4GB niezależnie od tego ile jest dostępne w systemie; czy masz w komputerze 512MB RAMu czy 16GB - zawsze proces dostanie całe 4GB
przy uruchomieniu 20 programów oznacza to że w sumie mają do użytku 80GB, a w praktyce gdyby wszystkie nagle zaczęły być pazerne na pamięć to ta zaraz by się skończyła - to coś jak nieograniczone skrzynki pocztowe na wp.pl - niby nie mają limitu, ale wiadomo że cała idea bazuje na tym że przeciętnie użytkownik zajmuje zaledwie kilkadziesiąt MB
a więc każdy proces dostaje 4GB, z tego 2GB jednak tylko 2GB są do użytku programisty - resztą zajmuje się kernel
pamięć ta jest już jednak na starcie częściowo zajęta przez dll-ki które podczas wczytywania alokują i dealokują pamięć pozostawiając luki - tak samo jak w przypadku pamięci fizycznej - tak samo pamięć wirtualna się w ten sposób niestety fragmentuje
przydałoby się wprowadzić pamięć wirtualną w pamięci wirtualnej, ale zamiast tego wykorzystuje się chociażby listy - które nie potrzebują stałego, ciągłego bloku pamięci a tylko każdy element pamięta adres kolejnego (alokują wiele małych fragmentów) - w ten sposób można wykorzystać całą dostępną pamięć do ostatniego bajta
w praktyce po uruchomieniu programu można się spodziewać ciągłego bloku pamięci wirtualnej o rozmiarze około 1500MB
i tyle też można wpisać maksymalnie w malloc
przy aplikacji 32 bitowej co na każdym komputerze powinno się udać
i tak - możesz zająć 1500MB pamięci nawet jeżeli w komputerze masz tylko 512MB RAMu, a wolnej pamięci masz zaledwie 1MB; bo o ile nie uruchamiasz swojej aplikacji pod DOSem lub użytkownik ręcznie tej opcji nie wyłączył to wirtualizacja pamięci skorzysta z pliku wymiany, a więc rolę brakującej pamięci fizycznej spełni dysk twardy