验证子线程分配的内存空间在内存映射区

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <sys/types.h>

void *threadFunc(void *arg)
{
    void *ptr = malloc(1000);
    printf("thread heap'addr = %p\n", ptr);

    int i = 3;
    printf("thread stack'addr = %p\n", &i);
    getchar();
}


int main()
{

    pthread_t child;
    pthread_create(&child, NULL, threadFunc, NULL);

    sleep(10000);

    return 0;
}

结果打印
子线程的栈空间和堆空间地址指针ptr所在的地址=0x7fe840000b60
变量 i 所在的地址=0x7fe847399edc

查看进程的maps
进程maps
指针ptr和变量 i 所在的地址分别落在上图中箭头指向的地址区间内. 这些区间都是内存映射区.

如上图,虽然有个 [heap]表示的区间在这里插入图片描述但是这个[heap]区间是表示主线程分配的内存, 并不是子线程分配的内存区间. 子线程分配的内存区间都在内存映射区,底层通过调用mmap申请的内存空间, 包括子线程的栈空间和子线程的堆空间都在这块内存空间.

在某篇文章中看到这么一句话,如下在这里插入图片描述在这里插入图片描述图中圈选的地址空间, 间隔正好就是64M.

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值