Отображение объема выделенной памяти - PullRequest
1 голос
/ 19 января 2011

Привет Я пишу некоторые тестовые материалы, чтобы увидеть, что объем выделенной памяти отображается правильно

в диспетчере задач Windows. Ниже приведен код;

int main(int argc,char* argv[])
{
 struct stat st;
 char commandXCopy[200];
 char commandDelete[200];

 char *fNames[2^16];
 int i =0;
    char *ptr = (char *)malloc(sizeof(char) * 2^32);
     printf("\nTEST");

    if(!ptr)
            printf("\nCan not allocate");
    else
            printf("\nMemory allocate");


     while(1==1)
     {
     };

Я стараюсь делать огромные выделения из стека и кучи. Но все, что я вижу в диспетчере задач-> процессы, это ~ 800K.

И я не вижу сообщения «Не удается выделить».

У меня Windows 32bit XP Pro и я использую gcc, а приложение - это приложение dos.

gcc test.c

Привет

1 Ответ

5 голосов
/ 19 января 2011

Я думаю, что вы можете страдать из-за неправильного понимания: 2^32 - это , а не 2 32 (4G, если предположить, что ваши байты имеют длину восемь битов, что я буду для целейэтот ответ) в C.

^ - побитовый оператор XOR.Итак, что вы на самом деле выделяете:

     binary        hex     decimal
    ---------      ----    -------
    0010 0000      0x20      32
xor 0000 0010      0x02       2
    =========
    0010 0010      0x22      34

или 34 байта.Точно так же, 2^31 даст вам 29 байтов, поэтому то, что вы думаете, должно быть разницей в 2G (2 32 - 2 31 ) на самом деле всего 5 байтов.

Если вы хотите использовать полномочия в C, вы должны взглянуть на функцию pow(), но я сомневаюсь, что вы сможете получить 4 ГБ памяти (возможно, на 64-битной ОС, но даже тогда, это очень много).

И еще одна вещь: sizeof(char) - это всегда 1 - умножать на него не нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...