Неравномерное распределение памяти для этой программы стека - PullRequest
0 голосов
/ 25 мая 2019

У меня есть небольшая программа, полученная по этой ссылке , которая помещает элемент в стек. При внимательном рассмотрении я вижу, что пространство памяти, занятое этим следующим указателем в программе для первого значения, второго значения,и третье значение другое. Может кто-нибудь дать мне удовлетворительное объяснение того, почему это происходит так.
Я использую компилятор gcc

#include <stdlib.h>
#include <stdio.h>

struct Node
{
    int data;
    struct Node *next;
};

int push_front( struct Node **head, int data )
{
    struct Node *tmp = malloc( sizeof( struct Node ) );
    int success = tmp != NULL;

    if ( success )
    { 
        tmp->data = data;
        tmp->next = *head;
        *head = tmp;
         printf("\nAddress of pointer head now is %p for value %d",*head,data);
    }

    return success;
}    



int main( void )
{
    struct Node *head;

    for ( int i = 0; i != 10; i++ ) push_front( &head, i );

return 0;


}

=======================================================================
output
-----

Address of pointer head now is 0x16f1010 for value 0
Address of pointer head now is 0x16f1440 for value 1
Address of pointer head now is 0x16f1460 for value 2
Address of pointer head now is 0x16f1480 for value 3
Address of pointer head now is 0x16f14a0 for value 4
Address of pointer head now is 0x16f14c0 for value 5
Address of pointer head now is 0x16f14e0 for value 6
Address of pointer head now is 0x16f1500 for value 7
Address of pointer head now is 0x16f1520 for value 8
Address of pointer head now is 0x16f1540 for value 9

Ожидается, что указатель заголовка должен быть равенбайт адресного пространства при вставке каждого значения.

1 Ответ

1 голос
/ 25 мая 2019

malloc используется для динамического выделения непрерывного блока памяти заданного размера.Эта память выделяется из кучи.

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

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