Memory 1

内存的基础使用

  程序在运行时对内存使用包括:

  • 程序代码、程序常量
  • 静态变量
  • 栈内存
  • 堆内存

  程序代码、程序常量和静态变量,在程序进入main函数执行之前就已经放到了内存里分配了空间。有一个冷知识,如果使用的静态变量是类的对象的话,还会在main函数执行之前就运行构造函数,在main函数执行之后才运行析构函数。

#include <iostream>
using std::cout;

class A
{
public:
	A()
    {
    	cout << "我在main执行前运行\n";

        _str = new char[15]; //分配内存
		strcpy(_str, "I cost memory!");
    }
    ~A()
    {
    	cout << "我在main执行后运行\n";

        delete [] _str; //释放内存
    }
private:
	char* _str;

public:
	static A a; //我是静态变量的声明
};
A A::a; //我是静态变量的实体

A b; //我是全局变量,也是一种静态变量

int main()
{
	cout << "我是main函数\n";
	return 0;
}

/*
输出:
	我在main执行前运行
	我在main执行前运行
	我是main函数
	我在main执行后运行
	我在main执行后运行
*/

  知道这个的用处是什么呢?正如上面这一段程序所示,一个静态变量的对象可能会分配了一些随着自己的生命周期使用的内存,这些被分配的内存在静态对象销毁以前是不会被释放的,而静态对象在程序结束以前也一直不会被销毁,造成这些内存持续的占用,所以使用静态对象进行内存分配的时候,要在意一下内存不会被及时释放。
  至于堆内存和栈内存的使用要点,都是大家掌握的基础知识了,new和delete的对应,栈内存在Block内的分配和释放,栈会溢出等等的就不用多说了。

标题目录