博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
APUE第15章学习扎记之程序的存储区布局试验
阅读量:5913 次
发布时间:2019-06-19

本文共 2087 字,大约阅读时间需要 6 分钟。

hot3.png

[root@localhost apue.2e]# cat apue15.11.c

#include "apue.h"
#include <sys/shm.h>
#define    ARRAY_SIZE    40000
#define    MALLOC_SIZE    100000
#define    SHM_SIZE    100000
#define    SHM_MODE    0600    /* user read/write */
char    array[ARRAY_SIZE];    /* uninitialized data = bss */
static int arraystatic[ARRAY_SIZE] = {0};
int uninitdata;
int initdata = 1;
static int printString(void)
{
    
    printf("hello guy!!!\n");
    return 1;
}
int
main(void)
{
    int        shmid;
    char    *ptr, *shmptr;
    static int testStatic = 0;
    auto int testAuto = 1;    
    printf("array[] from %lx to %lx\n", (unsigned long)&array[0],
      (unsigned long)&array[ARRAY_SIZE]);
    printf("stack around %lx\n", (unsigned long)&shmid);
    if ((ptr = malloc(MALLOC_SIZE)) == NULL)
        err_sys("malloc error");
    printf("malloced from %lx to %lx\n", (unsigned long)ptr,
      (unsigned long)ptr+MALLOC_SIZE);
    
    printf("static data in %lx\n", (unsigned long)&testStatic);
    printf("auto data in %lx\n",(unsigned long)&testAuto);
    if ((shmid = shmget(IPC_PRIVATE, SHM_SIZE, SHM_MODE)) < 0)
        err_sys("shmget error");
    if ((shmptr = shmat(shmid, 0, 0)) == (void *)-1)
        err_sys("shmat error");
    printf("shared memory attached from %lx to %lx\n",
      (unsigned long)shmptr, (unsigned long)shmptr+SHM_SIZE);
    if (shmctl(shmid, IPC_RMID, 0) < 0)
        err_sys("shmctl error");
    int prt = printString();
    printf("uninitdata address is : %lx\n",(unsigned long)&uninitdata);
    printf("initdata address is : %lx\n",(unsigned long)&initdata);
    printf("printString address is : %lx\n",(unsigned long)&printString);
    
    printf("static array initdata address is from %lx  to  %lx \n",(unsigned long)&arraystatic[0],(unsigned long)&arraystatic[ARRAY_SIZE]);
    exit(0);
}

运行结果为:

[root@localhost apue.2e]# ./apue15.11.o

array[] from 6289a0 to 6325e0
stack around 7fff37c612b4
malloced from 1a7d010 to 1a956b0
static data in 628980
auto data in 7fff37c612b0
shared memory attached from 7f6af5f06000 to 7f6af5f1e6a0
hello guy!!!
uninitdata address is : 6325e0
initdata address is : 60183c
printString address is : 400f6f
static array initdata address is from 601880  to  628980

分析上面所有在存储区的结构分配。。。。

转载于:https://my.oschina.net/DanielLee/blog/201949

你可能感兴趣的文章
删除缓存
查看>>
在Unity(C#)下实现Lazy Theta*寻路
查看>>
数据获取以及处理系统 --- 功能规格说明书
查看>>
深入理解linux系统下proc文件系统内容
查看>>
axios 或 ajax 请求文件
查看>>
Mysql 备份与恢复
查看>>
cmake的四个命令:add_compile_options、add_definitions、target_compile_definitions、build_command...
查看>>
Entity Framework 之三层架构
查看>>
nohup和&后台运行,进程查看及终止
查看>>
Apache2.2和Apache2.4中httpd.conf配置文件 权限的异同
查看>>
设计模式-简单工厂、工厂方法模式、抽象工厂模式详解
查看>>
利用Python进行文章特征提取(二)
查看>>
前端开发中同步和异步的区别
查看>>
滑雪在日本 之 新泻篇 10
查看>>
.NET 表达式计算:Expression Evaluator
查看>>
Threading and Tasks in Chrome
查看>>
《Android深度探索》第八章心得体会
查看>>
think php框架接入微信支付中需要注意的问题(php 小白适用)
查看>>
联想E431笔记本wifi驱动安装
查看>>
【HDOJ】4326 Game
查看>>