Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Jak sprawdzić ile maksymalnie mogę dynamicznie zaalokować pamięci [C]

Ostatnio zmodyfikowano 2015-01-25 11:40
Autor Wiadomość
pekfos
» 2015-01-24 09:52:35
Co myślicie o takim właśnie alokowaniu i zwalnaniu pamięci,  takie ręczne sprawdzanie?
Ale po co chcesz to wiedzieć? Ilość wolnej pamięci ogółem możesz pobrać przez WinAPI. A jak system odmówi zaalokowania pamięci, to dostaniesz pusty wskaźnik/wyjątek - na to powinieneś reagować. Jeśli koniecznie chcesz wiedzieć, że w jakimś krytycznym kodzie nie zabraknie nagle pamięci, zaalokuj własną pulę i sam nią zarządzaj. System nie odmówi ci pamięci, która i tak jest już twoja.

unsigned int = 4294967295 * 4 / 1024 / 1024 / 1024 = 15,9
2^32 / 2^30 = 4 GB.
P-125459
Monika90
» 2015-01-24 10:10:04
W Windows być może można użyć tej funkcji
https://msdn.microsoft.com​/en-us/library/windows/desktop​/aa366589%28v=vs.85%29.aspx
ale to jest wyższa szkoła jazdy i naprawdę nie rozumiem po co Ci to?
P-125460
kizia
Temat założony przez niniejszego użytkownika
» 2015-01-24 14:39:50
Mnie to do szczęścia niepotrzebne, jestem szczęśliwy bez tego, ale moj wykładowca chyba nie bardzo. Zostawmy ten problem bo skoro nie ma jakiegoś normalnego rozwiązania to znaczy że nie jest to istotny problem, a zrobie to tak jak mówiłem, zwiększając aż system odmówi. Tylko wytłumaczyłbyś Pekfos jak powienienm to liczyć. Bo ja to rozumiem tak, że t_size może przyjąć maksymalną wartość 4294967295, czyli tyle elementów int mogę stworzyć czyli mnożę to razy 4 i wychodzi mi liczba bajtów jaką to zajmuje. Jak powinienem to rozumieć?
P-125474
DejaVu
» 2015-01-24 14:47:13
Bo ja to rozumiem tak, że t_size może przyjąć maksymalną wartość 4294967295, czyli tyle elementów int mogę stworzyć czyli mnożę to razy 4 i wychodzi mi liczba bajtów jaką to zajmuje. Jak powinienem to rozumieć?
Malloc alokuje BAJTY, a nie INT-y. Poza tym maksymalna wartość jaką można przekazać do funkcji nie oznacza wcale, że aż tyle uda się zaalokować.
P-125475
kizia
Temat założony przez niniejszego użytkownika
» 2015-01-24 15:11:29
Racja racja po prostu najpierw używałem calloc a wtedy podaje osobno rozmiar i ilość elementów.
Obliczam to mniej więcej w ten sposób, co o tym myślicie ?

       while( 1 )
        {
            bigSize += 10485760;
            if( bigSize >= 4294967294 )
            {
                printf( "BUUUM!" );
                return 0;
            }

           pInt[0] = ( int *) realloc( pInt[1], 1 * sizeof(int) );
           pInt[1] = ( int *) realloc( pInt[0], bigSize * sizeof(int) );

            if( pInt[1] == NULL )
            {
                printf("Too much.%d\n", bigSize );
                bigSize -= 10485760;
                free( pInt[0] );
                break;
            }
        }
P-125476
kizia
Temat założony przez niniejszego użytkownika
» 2015-01-25 11:39:54
Myślę że jest spoko
P-125517
kizia
Temat założony przez niniejszego użytkownika
» 2015-01-25 11:40:11
Oki,  dzięki to zamykam temat
P-125518
1 « 2 »
Poprzednia strona Strona 2 z 2