C++ Insight: 内存分配

风行水上 @ 2009-08-13 19:53:34
标签:

    存储空间管理是 C++ 中的重要内容。很多错误也都和内存管理有关。

    std::cout << "This is a string" << std::endl;
    

    静态内存分配 (static)

    所谓静态(static),是说在编译的时候已经将内存分配好了。

    每个程序都有一个对应的数据区。编译器把静态变量就存放在这个数据区中的固定位置。因而静态数据的存储地址在程序运行过程中是固定不变的。除了用 "static" 显示声明的变量,常量字符串(比如上面例子中的 "This is a string")也可以看作是匿名的静态变量。

    分配在栈上(stack)

    TODO

    动态内存分配

    new

    new 在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。

    常见的形式如 new Object();

    有时我们会看到下面”奇怪“的用法

    class A;
    A a, b;
    new (&a) b;  // 相当于 a->A::A(b);
    

    上面的用法其实是省略了空间分配的步骤,在指定地址上通过拷贝构造函数初始化一个对象。

    delete

    delete 负责释放 new 分配的内存。

    参考资源

    标签:

      分享到:
      comments powered by Disqus

      35/39ms