• 进程模型测试程序


    #include <stdlib.h>
    #include <stdio.h>
    #include <errno.h>
    #include <pthread.h>

    //extern int errnop;
    //extern int errno;
    extern _text;
    extern _etext;
    extern _data;
    extern _edata;
    //extern char *environ[];
    int     i_initialized = 1;      /* initialized global variable. */
    long    l_uninitialized;        /* uninitialized global variable. */
    //int g_i300;
    void thread_sub_func(void* param)
    {
        int i_val2;
        printf("param =        \t\t0x%016p\n",&param);
        printf("i_val2 =       \t\t0x%016p\n",&i_val2);
        printf("size =       \t\t%lld\n",(long long)param-(long long)&i_val2);
        //memset(&i_val2,0,124);
    }
    void thread_func()
    {
        int i_val;
        printf("i_val =        \t\t0x%016p\n",&i_val);
        int* pi = new int();
        if(pi == NULL)
        {
            fprintf(stderr,"分配内存失败\n");
            return;
        }
        printf("pi =        \t\t0x%016p\n",pi);
        char* pMalloc;
        if((pMalloc = (char*) malloc(10)) == NULL)
        {
            return;
        }
        printf("pMalloc =        \t\t0x%016p\n",pMalloc);
        thread_sub_func(&i_val);
        while(true)
        {
            fprintf(stdout,"pthread...\n");
            sleep(1);
        }
    }
    int
    main(int argc, char *argv[])
    {
            typedef void *(*FUNC)(void *);
        char    str_buf[BUFSIZ];    /* auto storage class variable. */
        char    *heap_mem;          /* heap memory. */
        if ((heap_mem = (char*)malloc(BUFSIZ)) == /*(void *)*/NULL) {
            sprintf(str_buf, "malloc() failed with errno = %d", errno);
            perror(str_buf);
        }
        printf("_text =\t\t\t0x%016p\n", &_text);
        printf("_etext =\t\t0x%016p\n", &_etext);
        printf("_data =\t\t\t0x%016p\n", &_data);
        printf("_edata =\t\t0x%016p\n", &_edata);
        printf("argv[] =\t\t0x%016p\n", argv);
        //printf("environ[] =\t\t0x%016p\n", environ);
        
    //printf("errnop =\t\t0x%016p\n", &errnop);
        
    //printf("errno =\t\t\t0x%016p\n", &errno);
        printf("i_initialized = \t0x%016p\n", &i_initialized);
        //printf("g_i300 =        \t0x%016p\n",&g_i300);
        printf("l_uninitialized = \t0x%016p\n", &l_uninitialized);
        printf("str_buf = \t\t0x%016p\n", str_buf);
        printf("heap_mem = \t\t0x%016p\n", heap_mem);
        
        pthread_t tid;
        if(pthread_create(&tid,NULL,FUNC(thread_func),NULL))
        {
            fprintf(stderr,"创建线程失败\n");
            exit(0);
        }
        pthread_join(tid,NULL);
        exit(0);
    }
  • 相关阅读:
    vue-resource请求
    vue的生命周期
    Swift-多类型封装
    Swift
    Swift-structures 和 classes 初始化
    iOS-延时加载,延时初始化
    Swift-Closures
    WKWebView-填坑总结
    存档&&解档游戏状态
    循环引用 && weak strong
  • 原文地址:https://www.cnblogs.com/hbt19860104/p/2627142.html
Copyright © 2020-2023  润新知