#include <stdio.h>
#include <stdlib.h>
/**
*
* bss段的变量
* 没有初始化的和初始化为0的全局变量和静态变量,bss类型的全局变量只占运行时的内存空间,而不占文件空间。
*
*/
int num_bss_1;
int num_bss_2 = 0;
static int num_bss_3;
/**
*
* .data段的变量
*
*/
int num_data_1 = 123;
static int num_data_2 = 123;
void stack()
{
/**
*
* stack 栈区申请的字符串
*
*/
char stack[] = {'s','t','a','c','k','\0'};
printf("%s\n",stack);
}
void heap(char *heap)
{
/**
*
* heap 堆区申请的字符串
* 显示申请动态内存
*/
heap = malloc(sizeof(char)*5);
heap[0] = 'h';
heap[1] = 'e';
heap[2] = 'a';
heap[3] = 'p';
heap[4] = '\0';
printf("%s\n",heap);
}
void rodata()
{
/**
*
* .rodata 段申请的字符串
*
*/
char *rodata = "rodata";
printf("%s\n",rodata);
// printf("rodata\n");
}
int main()
{
rodata();
stack();
/**
*
* 1、显示释放动态内存
* 2、如果不释放堆区的内存,之后仍可继续访问
* 3、使用前后都需要指向NULL,避免悬空指针
*/
char *heap_point = NULL;
heap(heap_point);
free(heap_point);
//printf("%s\n",heap);
// 好习惯
heap_point = NULL;
return 0;
}
备份地址: 【分析一段程序内存segment分配】