存储类别、链接和内存管理个人理解笔记(c/c++)(待更新)

引言

在c语言的学习中我们能发现一个特点:不能重复声明同一个变量名

int main()
{
    int a;    //声明一个int类型的变量a
    
    int a;    //报错:a重定义,多次初始化

    char a;   //报错:a重定义,不同的基类型

    return 0;
}

这是一个通过生活/业务逻辑就能理解的概念,因为遇到同名同姓的人,日常生活一定会将他们做出区分

如果他们叫法完全一样将会很麻烦,代码也是如此,否则打印时,a到底打印哪个?

但是我们会发现一个神奇的现象,当我们使用选择/循环/自定义函数时,我们是允许相同变量名出现的:

int main()
{
	int a = 0;

	if (a == 0)    //main中a = 0 满足条件
	{
		int a = 10;//声明了一个if当中的a变量,并初始化,赋值为10
		printf("if里的a:%d    ", a); //打印if当中的a
	}

	printf("main中的a:%d\n", a); //打印main当中的a

	return 0;
}

上述例子中打印结果时if当中的a:10        main当中的a:0

想要理解这个原因和道理,这就是这个笔记想要讨论的问题。

---------------------------------------------------------------------------------------------------------------------------------

存储类别(storage class)

内存

了解存储类别前,先简单了解内存的概念。

我们一般了解的内存:运行内存,容量,4GB,8GB,1TB...

通俗点理解内存就是计算机给你提供的一些可操作的空间

类比一下,内存就像是计算机规划了既定的房间,你可以在里面规划出不同的空间区域,在这个房间里放入各种各样的东西。

而我们定义的每一个值,就比如你在编译器中写下一个int a = 0;诸如此类都会占用一定的内存空间。

什么是存储类别

我们光知道有了这个房间,但我们该如何有效的利用空间呢?

首先,我们构思一个场景:我们在房间里面用餐巾纸,抽一张,用完丢到了垃圾袋,当垃圾袋满了是需要把垃圾袋丢掉的吧。那如果我们一直制造垃圾,一直不处理垃圾,最后房间注定就会变成垃圾堆的。

计算机的内存也是如此,而当我们运行程序的时候,一行int a = 0;的代码使用了内存这个空间的一部分,我们忽略了一个问题,当我们用完了变量a,我们并没有执行“丢掉垃圾袋”的操作。

---------------------------------------------------------------------------------------------------------------------------------

事实上,通常情况下,当定义的变量变成垃圾的时候,我们的计算机都会自动帮我们销毁,释放出被“垃圾”占有的空间,以便我们更有效地利用内存。这就是自动变量的概念。

我们的c语言提供了不同的模型方便我们有效的使用内存。俗点理解就是:让计算机知道,什么是垃圾。

这些所谓的模型创造就是依靠着存储类别的。自动变量,就是拥有“自动”这一存储类别的变量。

存储类别提供了什么?

是方便了程序员在编写的代码中指定变量应当是什么类型的工具,存储类别提供了程序员对代码生命期的可控性和可见性

通俗点说,就是你可以指定什么东西在什么时候会变成垃圾

---------------------------------------------------------------------------------------------------------------------------------

存储期/生命期

以上我们提到了一个特殊的名词:生命期,或者叫存储期。

存储期描述各种变量/对象的生存期

简单来说,就是用来指定什么东西什么时候变成垃圾的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值