深入理解计算机系统基础 locate函数

数据在计算机内部的存储位置

  • 不同数据存储在不同区域
    malloc函数和free的函数存储在堆中
    函数参数和局部变量存储在栈中
    全局变量和静态变量存储在数据段中

一. 源代码部分

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h> 
static void show_pointer(void *p, char *descr) { 
  printf("%s\t%p\t%lu\n", descr, p, (unsigned long) p);
}
char big_array[1L<<24];    /*  16 MB */
//char huge_array[1L<<31];   /*   2 GB */
char huge_array[1L<<30];/*   1 GB */
int global = 0;
int useless() { return 0; }
int main ()
{
  void *p1, *p2, *p3, *p4;
  int local = 0;
  p1 = malloc(1L << 28);
  p2 = malloc(1L << 8);
  //p3 = malloc(1L << 32);
  p3 = malloc(1L << 16);
  p4 = malloc(1L << 8);
  show_pointer((void *) big_array, "big array");
  show_pointer((void *) huge_array, "huge array");
  show_pointer((void *) &local, "local");
  show_pointer((void *) &global, "global");
  show_pointer((void *) p1, "p1");
  show_pointer((void *) p2, "p2");
  show_pointer((void *) p3, "p3");
  show_pointer((void *) p4, "p4");
  show_pointer((void *) useless, "useless");
  show_pointer((void *) exit, "exit");
  show_pointer((void *) malloc, "malloc");
  return 0;
}

二. 运行结果

在这里插入图片描述

三. 代码解析

#include <unistd.h>

  • unistd.h是unix std的意思,是POSIX标准定义的unix类系统定义符号常量的头文件,包含了许多UNIX系统服务的函数原型,例如read函数、write函数和getpid函数。

static void show_pointer(void *p, char *descr)
{
printf("%s\t%p\t%lu\n", descr, p, (unsigned long) p);
}

  • static是静态变量。
  • %s表示输出字符串。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值