C++
文章平均质量分 91
逃课的小学生
这个作者很懒,什么都没留下…
展开
-
libc 2.27 堆管理机制
由于在libc2.26之后引入tcachebins,所以堆分配机制和之前不太相同tcachebins——tcachebins是一个长度为64的字节数组,每个字节数组对应一条链表。所以tcachebins只能存放0x0-0x400大小的堆,且每个链表长度为7。并且类似于fastbins,是一个单链表。在释放大小为0x0-0x400大小的堆的时候,首先会被释放入对应长度tcachebins对应的链表中,当长度超出7后,再放入fastbin或unsortbins中。malloc的时候当发现malloc对应大小原创 2020-10-06 20:58:10 · 1275 阅读 · 0 评论 -
一些关于程序内存布局的问题
1.栈栈大小是有默认值的,当申请的临时变量太大或者函数调用深度过深会导致程序的栈空间不够用。这时我们需要修改栈大小1.Linux系统:ulimit -a #显示当前用户的栈大小ulimit -s 32768 #将当前用户的栈大小设置为32M bytes2. Windows (在编译过程中的设置):1). 选择 "Project->Setting".2). 选择 "Link".3. 选择 "Category"中的 "Output".3. 在 "Stack alloca原创 2020-07-28 17:43:13 · 326 阅读 · 0 评论 -
linux-pthread-多线程编程
线程按照其调度者可以分为用户级线程和核心级线程两种用户级线程主要解决的是上下文切换的问题,它的调度算法和调度过程全部由用户自行选择决定,在运行时不需要特定的内核支持;我们常用基本就是用户级线程,所以就只总结一下POSIX提供的用户级线程接口;基本线程操作相关的函数:1线程的建立结束2线程的互斥和同步3使用信号量控制线程4线程的基本属性配置基本线程操作:函数 说明 函数声明 返回值 参数 pthread_start() 创建线程开始运行相关...转载 2020-07-13 14:31:12 · 449 阅读 · 0 评论 -
C++ stl 算法
1.概述对于C++的stl,除了一些基本结构和一些自带的函数,还有着大量的使用函数模板实现的算法支持stl。这些算法主要由<algorithm>,<numeric>组成。要使用stl的算法函数要包括头文件<algorithm>,对于数值算法要包含<numeric>2常用算法简介2.1排序算法sort(),stable_sort()——对全体元素排序,不同的是stable_sort()会保证相等的元素的相对关系 partial_sort():对原创 2020-06-26 20:27:07 · 419 阅读 · 0 评论 -
c++ stl set
1.定义set,就是数学上的集合——即set中的每一个元素只能出现一次,并且set中的元素是已经从小到大排好序的,使用set需要引入头文件#include<set>2.基本函数2.1构造函数std::set<int> se:创建一个空的set std::set<int> se{1,2,3,4,5}:创建一个拥有元素1,2,3,4,5的set std::set<int> se1(se):创建一个和se相同的set std::set<i原创 2020-06-23 18:37:03 · 393 阅读 · 1 评论 -
C++ stl map
1.定义map是一类关联容器,他提供一对一的数据处理能力。它的特点是增加和删除节点对迭代器的影响很小。而且map可以修改实值,而不能修改key。注意使用需要加头文件#include<map>2.基本函数2.1.构造函数std::map<int,int> ma1:创建一个空的map。 std::map<int, int> ma1{ { 0, 0 }, { 1, 2 }, { 2, 3 } }:创建一个拥有元素{0,0},{1,2},{2,3}的map s原创 2020-06-16 11:14:34 · 275 阅读 · 0 评论 -
C++ stl list
目录1.定义2.基本函数2.1.构造函数2.2.添加元素2.3.删除元素2.4.list重要的迭代器2.5.list其他函数3.list使用实例1.定义list是C++ stl中的部分内容,本质上list容器就是一个双向链表,可以高效的插入删除元素。使用的时候需要添加头文件#include<list>2.基本函数2.1.构造函数std::list<int> li:创建一个空的list std::list<int> li原创 2020-06-15 18:17:23 · 301 阅读 · 0 评论 -
C++ 匿名函数
1.定义所谓匿名函数,其实类似于python中的lambda函数,其实就是没有名字的函数。使用匿名函数,可以免去函数的声明和定义。这样匿名函数仅在调用函数的时候才会创建函数对象,而调用结束后立即释放,所以匿名函数比非匿名函数更节省空间2.详解C++中的匿名函数通常为[capture](parameters)->return-type{body},当parameters为空的时候,...原创 2019-09-20 14:18:11 · 39408 阅读 · 4 评论 -
C++ 文件操作
1.定义本章主要介绍一些和unix文件操作相关的结构体,例如stat,dirnet等2.详解2.1.stat简介stat是文件类,主要作用是用来获取文件信息,其需要的头文件为#include<sys/types.h>,#include<sys/stat.h>,#include<unistd.h>2.2.stat声明我们使用struc...原创 2019-09-16 18:24:27 · 1185 阅读 · 0 评论 -
C++ unordered_set
目录1.定义2.基本的函数2.1.unordered_set构造2.2.添加新的元素(注意无法插入相同元素)2.3.查找元素2.4.查找桶接口2.5.观察器2.6.清除元素2.7.其他函数1.定义unordered_set本质是使用hash散列的方式存储数据,是一种使用hash值作为key的容器,所以当有频繁的搜索、插入和移除拥有常数时间。unor...原创 2019-09-16 15:22:48 · 28274 阅读 · 3 评论 -
C++ stl vector
目录1.定义2.基本函数2.1.vector 构造:2.2.vector添加元素2.3.vector删除元素2.4.vector重要的迭代器2.5.vector其他函数3.vector使用实例3.1.初始化vector中的元素3.2.遍历vector中的元素3.3.vector中的元素排序(这里只是简单介绍一些对stl的算法,详细了解可以查看alg...原创 2019-09-15 11:34:39 · 473 阅读 · 0 评论 -
C++ weak
1.弱符号:弱符号,这涉及到编译中符号的概念。在Linux开发环境中,有强符号和弱符号,符号简单来说就是函数、变量的名字,对于全局(非局部、非static)的函数和变量,能不能重名是有一定规矩的,强、弱符号就是针对这些全局函数和变量来说的。 符号类型 对象 强 函数名,赋初值的全局变量 弱 ...原创 2019-09-11 19:44:30 · 1905 阅读 · 0 评论