2019-12-27 07:53
⁄ 工业·编程
⁄ 共 152字
看包含的头文件和使用的函数啊~两者包含的函数不一样~
要是使用fopen/memcpy等等这样标准C的函数,当然会在链接时使用到标准C库(ANSI C).如果使用了read/write这些glibc库实现的函数,肯定就在链接时使用到glibc库~
具体使用了什么库,要看调用的函数了~可能不会仅仅只包含一个库~
GCC, glibc阅读全文
2019-12-26 18:43
⁄ 工业·编程
⁄ 共 5825字
一、STL中的内存管理
当我们new一个对象时,实际做了两件事情:(1)使用malloc申请了一块内存。(2)执行构造函数。在SGI中,这两步独立出了两个函数:allocate申请内存,construct调用构造函数。
这两个函数分别在<stl_alloc.h>和<stl_construct.h>中。
二、第一级配置器
第一级配置器以malloc(),free(),realloc()等C函数执行实际的内存配置、释放、重新配置等操作,并且能在内存需求不被满足的时候,调用一个...
stl, 内存管理阅读全文
2019-12-25 18:28
⁄ 工业·编程
⁄ 共 3534字
malloc/calloc/free是库函数,在底层使用系统调用进行内存申请,自己添加了中间层进行管理,brk,sbrk,mmap,munmap是系统调用。申请的是虚存。
mmap 映射匿名页, 当发生缺页异常时, linux 内核为缺页分配一个新物理页,并将该物理页清 0。
对空闲的小内存块只会在 malloc 和 free 的时候进行合并。
主分配区与非主分配区用环形链表进行管理。 每一个分配区利用互斥锁( mutex)使线程对于该分配区的访...
内存管理阅读全文
2019-12-24 18:19
⁄ 工业·编程
⁄ 共 1365字
STL中的内存管理为两级配置器,一级配置器是当申请内存大于128B时候使用系统函数malloc/free进行申请释放。
二级配置器,将内存块分为大小间距为8的16个8B到128B的等长度的chunk,使用数组+链表管理。数组中存储的是大小相同的用链表链接起来的内存块。在STL中使用长度为16的数组,0处存储8Byte,然后依次16,24,36.....依次加8字节。二级配置器维护着一个内存池,如果所申请的内存块对应的数组的链表下为空,就向池中申请,如...
stl, 内存管理阅读全文
2019-12-23 18:10
⁄ 工业·编程
⁄ 共 16916字
最近在学习boost库里的一些常用的库,目前已经看到了boost库的bind适配器这块,个人感觉bind这玩意太好用了,整体来讲bind要比STL里的bind1st和bind2nd要好用很多,下面就从一些基本的用法来说起吧。
bind组件在boost中包含了很多的重载函数,其中这些函数主要是以参数的个数以及被绑定的对象类型来划分,而编译器会根据具体的参数类型以及参数个数来自动地调用相关的形式,在bind中,接收的一个参数必定是一个可调用的对象,这...
boost库阅读全文
2019-12-22 18:05
⁄ 工业·编程
⁄ 共 6597字
在上篇博文中,我们系统地学习了Boost库中智能指针的学习,在处理单个对象时,采用智能指针是一个很不错的选择,但是当需要管理的对象不止一个时,这时候智能指针就有点无能为力了,今天我们就来看看Boost库中pool库的一些东西,Boost.pool库是基于简单分隔存储思想实现的一个快速、紧凑的内存池库,不仅能够管理大量的对象,而且还可以作为stl的内存分配器,在需要大量地分配和释放小对象时,很有效率,且完全不用考虑delete,...
boost库, 内存管理阅读全文
2019-12-21 17:37
⁄ 工业·编程
⁄ 共 11671字
说起内存管理,大多数人第一反应就是new,delete等操作,这一类操作所针对的对象就是堆对象,在使用这一类操作时,一个很突出的问题就是内存泄露,这也是每个C++程序猿的挥之不去的噩梦,曾几何时因为一个不起眼的指针释放问题,而导致了服务器因内存写满而宕机,而如今这类问题,对于C++程序开发者而言已经不再是问题了,为了解决这个问题,C++程序员采用了RAII机制(资源获取即初始化),具体思想就是:在对象初始化时分配资...
boost库, 内存管理阅读全文
2019-12-20 17:28
⁄ 工业·编程
⁄ 共 710字
boost主要是通过六种智能指针来管理内存的:scoped_ptr scoped_array shared_ptr shared_array weak_ptr intrusive_ptr。他们都是轻量级的对象,速度与原始指针相差无几,对于所指的类型T也仅有一个很小且很合理的要求:类型T的析构函数不能抛出异常。
scoped_ptr:仅仅提供了*和->操作,且赋值操作符和拷贝构造函数被定义为私有的,有效的防止了指针所有权的转让。 ==和!=操作符被私有化,拒绝比较操作。
scoped_array:包装...
boost库, 内存管理阅读全文
2019-12-19 17:23
⁄ 工业·编程
⁄ 共 3486字
1. RAII机制
为了管理内存等资源,C++程序员通常采用RAII机制(资源获取即初始化,Resource Acquisition Is Initialization),在使用资源的类的构造函数中申请资源,然后使用,最后在析构函数中释放资源。
1)在栈上创建对象(局部对象):RAII机制正常工作,当离开作用域时,对象会自动销毁从而调用析构函数释放资源
2)在堆上创建对象,使用new操作符,那么它的析构函数不会自动调用,只有对应的delete操作符销毁它才能释放...
boost库, 内存管理阅读全文
2019-12-18 17:12
⁄ 工业·编程
⁄ 共 481字
1 简要介绍
Boost的内存管理库,包含两部分内容,分别是smart_ptr库和pool库,其中我们熟知的shared_ptr、unique_ptr、weak_ptr早已在2011年引入C++11标准。
1)smart_ptr库包含scoped_ptr、unique_ptr、shared_ptr、weak_ptr、intrusive_ptr
2)pool库包含pool、object_pool、singleton_pool
smart_ptr库有什么作用?
1)里面包含我们熟知的shared_ptr、unique_ptr、weak_ptr
2)scoped_ptr和unique_ptr功能类似,但是它更精小...
boost库, 内存管理阅读全文