• C++中的“动态内存管理”,你知道多少!


           当你的程序运行时,突然的崩掉了;当你的大程序,运行时越来越慢;当你的程序,在不同的机子上运行的装填不一样;。。。你是否能想到是由于你的代码中对内存管理的缺失而导致,程序运行的诸多问题!

           当一块内存中的数据没有价值时,他就成为垃圾,在我们的程序的“小城市中”,如果来进行垃圾的回收,如何有效的管理资源,才是“城市”能否正常,良好运行的前提!


    垃圾回收的优缺点:

           实现垃圾回收有多中方法,各有特色!对于垃圾回收而言,最主要的就是简单和安全。在垃圾回收环境中,可以使用new分配内存,但是不需要显示地释放内存。相反,不再使用的内存会被自动回收。因此,不可能会忘记释放对象或者过早地释放对象,这样做简化了程序设计,并且阻止了有问题的类。另外,不可能意外地两次释放动态内存。因此,垃圾回收为内存管理问题提供了一种易于使用的,不容易犯错误的,可靠的解决方案。

           但是,简单而安全的垃圾回收是由代价的。第一个代价是垃圾回收机制引起的内存开销。所有垃圾回收的配置都会消耗一些CPU资源,因为这中不在使用的内存的回收并不是一个免费的过程。当使用手工的方法的时候,不会有这样的开销。

          第二个代价是在销毁对象时容易失控。使用手工的方法时,当对执行的delete语句时,及时地销毁这个对象(和所调用的析构函数),而垃圾回收没有这种切实而块速的规则。相反,当使用垃圾回收时,知道回收器运行并回收对象的时候,对象才会被销毁,而回收器只有在某个特定时刻才会运行。例如,回收器只有在自由内存的数量低于某个值的时候才会运行。另外,用户并不能总是知道垃圾回收器销毁对象的顺序和时间。在某些情况下,不能准确地知道对象销毁的时间会导致一些问题,因为这意味着程序不能准确地知道何时为动态分配的对象调用析构函数。

         对于作为后台任务运行的垃圾回收系统,这种失控可能会引发某种应用程序潜在的更加严重的问题,因为这样做将某种本质上不确定的行为引入到程序中。在后台运行的垃圾回收器实际上在不可预知的某个时刻回收不再使用的内存。例如:回收器通常只在CPU空闲时才会运行。由于可能从一个程序的系统

  • 相关阅读:
    ArrayBlockingQueue
    mysql数据库引擎
    数据库主从复制,分库分表
    Java并发工具类-Semaphore,Exchanger
    分片策略
    kafka
    关于数据库设计
    生产者消费者模式

    Callable、Future和FutureTask
  • 原文地址:https://www.cnblogs.com/bbsno1/p/3268651.html
Copyright © 2020-2023  润新知