memory

在C语言中,与其他编译语言一样,编译代码放入text段,而变量驻留在其他段中。
究竟是哪个存储器变量取决于变量如何定义。定义在所有函数之外的变量被认为是全局变量。
在任何变量前增加关键字static都会使该变量成为静态变量。
如果使用数据将静态变量或全局变量初始化了,它们就会存储在data内存段中,否则,这些变量就会存储在bss内存段中。
首先,必须使用用户名为malloc()的内存分配函数对对堆内存段中的内存进行分配。通常使用指针来引用堆中的内存。
最后,其余的函数变量存储在堆栈内存中。因为堆栈可以包含许多不同的栈帧,所以栈帧变量可以在不同的函数上下文内保持唯一。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>

int global_var;
int global_initialized_var=5;

void function()
{
int stack_var;
printf("the function's stack_var is at addres 0x%08x\n",&stack_var);
}

int main()
{
int stack_var;
static int static_initialized_var=5;
static int static_var;
int *heap_var_ptr;

heap_var_ptr=(int *)malloc(4);

printf("global_initialized_var is at addres 0x%08x\n",&global_initialized_var);
printf("static_initialized_var is at addres 0x%08x\n\n",&static_initialized_var);

printf("static_var is at addres 0x%08x\n",&static_var);
printf("global_var is at addres 0x%08x\n\n",&global_var);

printf("heap_var is at addres 0x%08x\n\n",heap_var_ptr);

printf("static_var is addres 0x%08x\n",&stack_var);
function();
}

本文标题:memory

文章作者:water

发布时间:2018年06月24日 - 17:28:46

最后更新:2018年07月01日 - 09:37:00

原始链接:http://9cat.top/2018/06/24/memory/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

------ 本文结束------
分享
分享