2月5日内存管理

堆区

  • 堆区由程序员管理,修改它的手段非常宽松
  • 在C语言中,变量的分配和释放使用类似malloc()和free()之类的函数
  • 堆区非常大,通常受限于可用的物理内存
  • 堆区需要使用指针访问
char* p = (char*)malloc(sizeof(10));
//堆区空间申请,申请10字节的空间
//成功申请空间时,函数的返回值便是堆区空间的首地址

代码示例

字符数组
#include <stdio.h>
#include<stdlib.h>
int main() {
    int n;
    scanf("%d", &n);
    char* str = (char*)malloc(sizeof(char) * (n+1));//'\0';
    getchar();//抵制空格
    gets(str);
    printf("%c", str[3]);
    free(str);//释放
    return 0;
}

全局变量

int n;//全局变量函数外定义,默认初始化为0
//全局变量和局部变量可以重名,局部变量大于全局变量
//局部变量不会被默认初始化

代码示例

#include <stdio.h>
#include<stdlib.h>
int a = 5, b = 7;
void hh(int a, int b) {
    printf("%d ", a++ && ++b);

}
int main() {
    int a = 3, b = 5;
    hh(a, b);//值传递,本身的a,b,不发生变化。
    printf("%d %d", a, b);
    return 0;
}
//全局变量声名
extern int a;

静态局部变量

特点

  • 1)在修饰变量的时候,static 修饰的静态局部变量只执行初始化一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。
  • (2)static 修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是 extern 外部声明也不可以。
  • (3)static 修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。static 修饰的变量存放在全局数据区的静态变量区,包括全局静态变量和局部静态变量,都在全局数据区分配内存。初始化的时候自动初始化为 0。
  • (4)不想被释放的时候,可以使用static修饰。比如修饰函数中存放在栈空间的数组。如果不想让这个数组在函数调用结束释放可以使用 static 修饰。
  • (5)考虑到数据安全性(当程序想要使用全局变量的时候应该先考虑使用 static)。
  1. 全局静态变量是显式用 static 修饰的全局变量,作用域是声明此变量所在的文件,其他的文件即使用 extern 声明也不能使用。
  2. 全局变量存储,在程序的整个生命周期都存在

栈区

特点

局部变量存储(自动,连续的内存)栈用来存储函数内部的变量(包括main()函数)。

  • 栈由CPU管理,无法修改
  • 变量自动地分配和释放
  • 栈并非没有限制,大部分栈都由一个上边界
  • 栈随着变量地产生和销毁生长和收缩
  • 栈区变量只有在函数创建它们地时候存在
  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值