MST

星途 面试题库

面试题:C语言指针变量的内存分配机制

在C语言中,定义一个指向整型的指针变量并为其分配内存空间,简述这个过程中内存是如何分配的,以及指针变量本身占用多少内存?
17.2万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. 定义指向整型的指针变量并分配内存空间示例代码
#include <stdio.h>
#include <stdlib.h>

int main() {
    int *ptr;
    ptr = (int *)malloc(sizeof(int));
    if (ptr == NULL) {
        printf("内存分配失败\n");
        return 1;
    }
    *ptr = 10;
    printf("指针指向的值: %d\n", *ptr);
    free(ptr);
    return 0;
}
  1. 内存分配过程
    • 首先定义了一个指针变量 ptr,这个指针变量本身在栈上分配内存,其大小取决于系统的寻址能力。在32位系统下,指针变量通常占用4个字节;在64位系统下,指针变量通常占用8个字节。
    • 然后使用 malloc 函数为 ptr 分配内存空间。malloc 函数从堆内存中分配一块指定大小(这里是 sizeof(int),通常在32位和64位系统下,int 类型一般占4个字节)的连续内存区域,并返回这块内存区域的起始地址,将其赋值给 ptr。这样,ptr 就指向了堆上分配的这块内存空间。
  2. 指针变量本身占用内存大小
    • 在32位系统中,指针变量通常占用4个字节,因为32位系统的地址总线宽度为32位,即可以表示 $2^{32}$ 个不同的内存地址,所以需要4个字节(32位)来存储一个内存地址。
    • 在64位系统中,指针变量通常占用8个字节,因为64位系统的地址总线宽度为64位,即可以表示 $2^{64}$ 个不同的内存地址,所以需要8个字节(64位)来存储一个内存地址。