关于定义指针后,创建空间内存占用问题的解释

看红色字就行

对于 int *p = (int *)malloc(sizeof(int));

这种定义方式,涉及到两个方面:指针 p 本身的内存占用和动态分配的内存

  1. 指针 p 的内存占用

    • 在32位系统上,指针 p 占用4个字节。
    • 在64位系统上,指针 p 占用8个字节。

    指针 p 的大小与它指向的数据类型无关,只与系统架构有关。

  2. 动态分配的内存

    • malloc(sizeof(int)) 动态分配了一块内存,大小是一个 int 的大小。
    • 在大多数系统上,int 通常占用4个字节,因此 malloc(sizeof(int)) 分配了4个字节的内存。

    动态分配的这块内存由指针 p 指向,但它的大小独立于指针 p 本身的大小。

完整的理解如下:

int *p = (int *)malloc(sizeof(int));
  • p 是一个指针,指向 int 类型。
  • p 本身占用的内存大小:
    • 在32位系统上是4个字节。
    • 在64位系统上是8个字节。
  • malloc(sizeof(int)) 分配了一块足够存储一个 int 的内存。
    • 通常,这块内存大小为4个字节(假设 int 是4个字节)。
  • p 被初始化为指向这块动态分配的内存。

总结:

  • 指针 p 本身的大小取决于系统架构,与它指向的数据类型无关。
  • 动态分配的内存大小由 malloc 的参数决定,在这个例子中是 sizeof(int),通常是4个字节。

因此,int *p = (int *)malloc(sizeof(int)); 中,指针 p 和动态分配的内存各自占用的大小如下:

  • 指针 p
    • 32位系统上:4个字节。
    • 64位系统上:8个字节。
  • 动态分配的内存:
    • 通常是4个字节(假设 int 是4个字节)。

无论指针指向的数据类型是什么,在一个给定的系统中,指针的大小都是固定的,与数据类型无关。这包括指向结构体的指针。

假设有如下结构体定义:

struct node {
 int x; 
 int y; 
}; 

struct node *p;

在这个例子中:

  1. struct node 的大小:结构体 struct node 包含两个 int 类型的成员。在大多数系统上,int 类型通常占用4个字节。因此,struct node 的大小一般是8个字节(两个 int 各占4个字节)。当然,这还可能受结构体内存对齐(padding)的影响,但这里先不考虑对齐问题。

  2. struct node *p 的大小:指针 p 是一个指向 struct node 类型的指针。在32位系统上,指针通常占用4个字节;在64位系统上,指针通常占用8个字节。指针的大小与它指向的数据类型无关。

因此,对于 struct node *p

  • 在32位系统上,p 指针占用4个字节的内存。
  • 在64位系统上,p 指针占用8个字节的内存。

总结起来,无论指针指向什么类型的数据(包括基本数据类型和结构体),指针本身的大小只取决于系统的架构(32位或64位),而不取决于它指向的数据类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值