分配给自引用结构指针的大小是多少

问题描述

struct node 
{ 
    int data1; 
    int data2;
    struct node* link; //line 5
};

第5行将分配多少内存,由于它指向的是具有两个单独的整数,因此它将是1个内存块还是2个内存块。

请帮助我混淆自引用指针的内存分配。

解决方法

在标准C ++中,对象指针的大小始终相同,无论所指向的对象包含什么。大小因系统而异,但是根据经验,在64位程序上,指针是64位,在32位程序上是32位,...希望您能得到这种模式。

一个类似的例子是建筑物的地址。建筑物的大小不会影响建筑物的地址大小。

,

其中有2个内存,一个是用于在结构体中存储指针的内存,另一个是结构体所指向的内存。

结构体中指针本身的大小为sizeof(struct node*),通常为长整型或8个字节(可能不是那样,请检查您的系统)。

将不为指针分配内存。它可能指向nullptr /0。您负责通过malloc,new或任何其他分配机制分配该内存。

,

指针链接的类型为struct node *。因此,从逻辑上讲,显然指针将指向类型为struct node的对象。因此,指针所指向的已分配内存范围将等于sizeof( struct node )

尽管通常您可以分配类型为struct node的对象数组,该对象的第一个元素将由指针指向。:)在这种情况下,内存范围将等于{{1} },其中N * sizeof( struct node )是分配的数组中的元素数。

另一方面,由于指针是结构的数据成员,因此它将占据为N类型的对象分配的内存范围的一部分。通常,根据所使用的系统,指针的大小等于4或8个字节。

这是一个演示程序。

struct node

程序输出为

#include <stdio.h>

struct node 
{ 
    int data1; 
    int data2;
    struct node* link; //line 5
};

int main(void) 
{
    printf( "sizeof( struct node ) = %zu\n",sizeof( struct node ) );
    printf( "sizeof( link ) = %zu\n",sizeof( struct node * ) );
    
    return 0;
}

或者说明性程序可以如下所示。

sizeof( struct node ) = 16
sizeof( link ) = 8

该程序的输出类似于上一个程序的输出

#include <stdio.h>

struct node 
{ 
    int data1; 
    int data2;
    struct node* link; //line 5
};

int main(void) 
{
    struct node obj;
    
    printf( "sizeof( obj ) = %zu\n",sizeof( obj ) );
    printf( "sizeof( obj.link ) = %zu\n",sizeof( obj.link ) );
    
    return 0;
}

即类型为sizeof( obj ) = 16 sizeof( obj.link ) = 8 的对象的大小等于struct node,而其数据成员16的大小等于8。