我是靠谱客的博主 威武玫瑰,最近开发中收集的这篇文章主要介绍[linux c/c++] 应用程序的内存分段,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

/*g-global  l-local
 * * s-static
 * * c-const
 * * n-not init
 * * i-init
 * * {type}=int char ...
 * * v-valued
 * */
#include <stdio.h>
#include <stdlib.h>

#define yk_macro_0 0   //?
#define yk_macro_1 1   //?

int yk_g_n_int;               //.bss
int yk_g_i_int_0=0;           //.bss
int yk_g_i_int_1=1;           //.data
static int yk_g_s_n_int;      //.bss
static int yk_g_s_i_int_0=0;  //.bss
static int yk_g_s_i_int_1=1;  //.data

const static int yk_g_c_s_n_int;  //.bss
static const int yk_g_s_c_n_int;  //.bss
const static int yk_g_c_s_i_int_0=0;  //.rodata
static const int yk_g_s_c_i_int_0=0;  //.rodata
const static int yk_g_c_s_i_int_1=1;  //.rodata
static const int yk_g_s_c_i_int_1=1;  //.rodata
const int yk_g_c_i_int_0=0;     //.rodata
const int yk_g_c_i_int_1=1;     //.rodata
const int yk_g_c_n_int;         //.bss


int main(int argc,char ** argv)   //.text
{
    int yk_l_int;                 //.stack,only run-time saw
    int yk_l_int_init_0=0;        //.stack,only run-time saw
    int yk_1_ini_init_1=1;        //.stack,only run-time saw
    static int yk_l_s_n_int;      //.bss
    static int yk_l_s_i_int_0=0;  //.bss
    static int yk_l_s_i_int_1=1;  //.data
    
    const yk_l_c_n_int;             //.stack,only run-time saw
    const yk_l_c_i_int_0=0;         //.stack,only run-time saw
    const yk_l_c_i_int_1=1;         //.stack,only run-time saw
    
}


//小结:1)const赋值的---> rodata   , const没赋值的---> bss
//    2)值为0的都在 bss(不管是默认给的,还是自己赋值的),   有初始值的(不为0) 全在data
//    3)非static括号内的都在堆里

//使用objdump -t 查看所有符号表,然后通过grep筛选

 

最后

以上就是威武玫瑰为你收集整理的[linux c/c++] 应用程序的内存分段的全部内容,希望文章能够帮你解决[linux c/c++] 应用程序的内存分段所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部