自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(391)
  • 收藏
  • 关注

原创 AdaBoost算法

参考:​​​​​​https://www.bilibili.com/video/BV1ix411i7yp?p=26机器学习技法 之 聚合模型(Aggregation Model)_士杰的博客-CSDN博客_聚合模型

2021-09-20 23:11:09 143

原创 前置声明

1

2020-11-25 07:04:55 723 1

转载 分页相关宏定义

PAGE_SHIFT PMD_SHIFT PUDSHIFT PGDIR_SHIFT 指定offset字段位数 指定offset和table总位数 确定页上级目录能够映射的区域大小 确定页全局目录能够映射的区域大小  PTRS_PER_PTE,PTRS_PER_PMD,PTRS_PER_PUD,PTRS_PER_PGD:分别表示页表,页中间目录,页上级...

2018-08-22 12:09:51 356

原创 linux的brk函数源码分析读书笔记

       最近分析内存申请一系列关系,应用程序自己的内存池,malloc/tcmalloc/jemalloc对内存的管理,现在分析linux操作系统对内存申请的管理,即brk函数。        系统调用sys_brk包括两个主要函数:    do_munmap 用于内存的释放     do_brk 用于内存的申请            首先,对新申请内存的地址进行调整,判断申请内...

2018-08-20 09:02:04 951

转载 linux堆内存管理malloc分析(3)

chunk级分析1、获取分配区的锁,为了防止多个线程同时访问同一个分配区,在进行分配之前需要取得分配区域的锁。线程先查看线程私有实例中是否已经存在一个分配区,如果存在尝试对该分配区加锁,如果加锁成功,使用该分配区分配内存,否则,该线程搜索分配区循环链表试图获得一个空闲(没有加锁)的分配区。如果所有的分配区都已经加锁,那么ptmalloc会开辟一个新的分配区,把该分配区加入到全局分配区循环链...

2018-08-13 19:40:21 328

转载 linux堆内存管理malloc分析(3)

Unsorted bin当释放较小或较大的chunk的时候,如果系统没有将它们添加对应的bins中,系统就将这些chunk添加到unsorted bin中。为什么要这么做呢?这主要是为了让glibc malloc机制能够有第二次机会重新利用最近释放的chunk(第一次就是fast bins机制)。利用unsorted bin,可以加快内存的分配和释放操作,因为整个操作都不需要花费额外的时间去查...

2018-08-13 15:53:16 878

转载 linux堆内存管理malloc分析(2)

前言在上一篇文章中,详细介绍了堆内存管理中涉及到的基本概念以及相互关系,同时也着重介绍了堆中chunk分配和释放策略中使用到的隐式链表技术。通过前面的介绍,我们知道使用隐式链表来管理内存中chunk总会涉及到内存的遍历,效率极低。对此glibc malloc引入了显示链表技术来提高堆内存分配和释放的效率。所谓的显示链表就是我们在数据结构中常用的链表,而链表本质就是将一些属性相同的“节点”串...

2018-08-13 12:04:11 3573

转载 程序中两个!!作用

两个!是为了把 非0值 转换成1,而0值还是0。因为C语言中,所有 非0值 都表示真。所以!非0值 = 0,而!0 = 1。  所以!!非0值 = 1,而!!0 = 0。

2018-08-08 16:59:29 360

转载 linux堆内存管理malloc分析(1)

堆内存管理介绍dlmalloc – General purpose allocator**ptmalloc2 – glibc**jemalloc – FreeBSD and Firefoxtcmalloc – Googlelibumem – Solaris本文主要学习介绍在linux glibc使用的ptmalloc2实现原理。本来linux默认的是dlmalloc,但是由于...

2018-08-06 12:29:32 1748 1

转载 VC6内存管理malloc(3)

ioinit申请内存0x130字节。把007d0ed0地址传给上游,之后调整剩余内存大小为ec0,ff0-130,因为在debug模式,所以还需要调整指针,返回实际使用内存的指针。00000002表示CRT_BLOCK,main函数内内存malloc,标记为NORMAL_BLOCK。程序执行到最后,链表中还有_CRT_BLOCK,不是内存泄漏,如果有NORMAL_BLOCK才是内存泄漏。内存申请完...

2018-08-05 19:30:20 591

转载 VC6内存管理malloc(2)

heap_init调用后,调用_ioinit,第一次进行内存调用malloc,申请256字节,在debug模式,使用malloc_dbg函数。之后调用_nh_malloc_dbg,nh_malloc_dbg调用_heap_alloc_dbg。对256字节的内存申请,还需要加上额外的管理信息,附加到真正的内存申请,附加后的内存大小是真正申请内存的大小。第3个指针指向调用的文件名,第4个变量,...

2018-08-05 17:16:20 473

转载 VC6内存管理malloc(1)

vc6程序main之前和之后的示意图(call stack),执行前内核先调用mainCRTStartup()函数,_heap_alloc_base()函数对内存分配有两种情况,小于1016字节,调用_sbh_alloc_block,管理小内存。大于1016字节使用windows调用HeapAlloc进行内存分配。vc10程序call stack,sbh调用深埋到OS的HeapAlloc内...

2018-08-05 16:24:24 877

转载 linux下的僵尸进程处理SIGCHLD信号

什么是僵尸进程?首先内核会释放终止进程(调用了exit系统调用)所使用的所有存储区,关闭所有打开的文件等,但内核为每一个终止子进程保存了一定量的信息。这些信息至少包括进程ID,进程的终止状态,以及该进程使用的CPU时间,所以当终止子进程的父进程调用wait或waitpid时就可以得到这些信息。而僵尸进程就是指:一个进程执行了exit系统调用退出,而其父进程并没有为它收尸(调用wait或wa...

2018-07-30 12:22:40 277

转载 linux退出部分信号介绍

1) SIGINT程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程。2) SIGQUIT和SIGINT类似, 但由QUIT字符(通常是Ctrl-\)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号。3) SIGTERM程序结束(terminate)信号, 与SIGKILL...

2018-07-30 12:14:24 2161

转载 linux 0.11的地址翻译(地址映射)过程

        首先以汇编级调试的方式启动bochs,引导Linux 0.11,在0.11下编译和运行test.c。它是个无限循环的程序,永远不会主动退出。然后在调试器中动过查看各项系统参数,从逻辑地址,LDT表,GDT表,线性地址到页表,计算出变量i的物理地址。最后通过直接修改物理内存的方式让test.c退出运行,test.c的代码如下:#include <stdio.h>...

2018-07-24 10:04:15 580

转载 epoll 水平触发和边缘触发的区别

EPOLLLT——水平触发 EPOLLET——边缘触发epoll有EPOLLLT和EPOLLET两种触发模式,LT是默认的模式,ET是“高速”模式。LT模式下,只要这个fd还有数据可读,每次 epoll_wait都会返回它的事件,提醒用户程序去操作,而在ET(边缘触发)模式中,它只会提示一次,直到下次再有数据流入之前都不会再提示了,无 论fd中是否还有数据可读。所以在ET模式下,read一个f...

2018-07-19 15:36:55 909

转载 不用加减乘除做加法

// 题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、×、÷// 四则运算符号。#include <cstdio>int Add(int num1, int num2){ int sum, carry; do { sum = num1 ^ num2; carry = (num1 & num2)...

2018-07-19 08:46:32 72

转载 求1+2+…+n

#include <cstdio>// ====================方法一====================class Temp{public: Temp() { ++ N; Sum += N; } static void Reset() { N = 0; Sum = 0; } static unsigned int GetSum...

2018-07-19 08:44:28 161

转载 股票的最大利润

// 题目:假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖交易该股// 票可能获得的利润是多少?例如一只股票在某些时间节点的价格为{9, 11, 8, 5,// 7, 12, 16, 14}。如果我们能在价格为5的时候买入并在价格为16时卖出,则能// 收获最大的利润11。#include <cstdio>int MaxDiff(const int* numb...

2018-07-19 08:41:48 314

转载 圆圈中最后剩下的数字

// 题目:0, 1, …, n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里// 删除第m个数字。求出这个圆圈里剩下的最后一个数字。#include <cstdio>#include <list>using namespace std;// ====================方法1====================int Last...

2018-07-19 08:38:58 116

转载 n个骰子的点数

题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。void Probability(int number, int* pProbabilities);void Probability(int original, int current, int sum, int* pProbabilities);void PrintProbabili...

2018-07-19 08:31:35 236

转载 队列的最大值

template<typename T> class QueueWithMax{public: QueueWithMax() : currentIndex(0) { } void push_back(T number) { while(!maximums.empty() && number >= ma...

2018-07-18 08:37:38 215

转载 和为s的两个数字+为s的连续正数序列

bool FindNumbersWithSum(int data[], int length, int sum, int* num1, int* num2){ bool found = false; if(length < 1 || num1 == nullptr || num2 == nullptr) r...

2018-07-18 08:30:33 90

转载 数组中唯一只出现一次的数字

在一个数组中除了一个数字只出现一次之外,其他数字都出现了三次。请找出那个吃出现一次的数字#include <cstdio>#include <exception>int FindNumberAppearingOnce(int numbers[], int length){ if(numbers == nullptr || length <= 0...

2018-07-18 08:16:21 412

转载 数组中只出现一次的两个数字

void FindNumsAppearOnce(int data[], int length, int* num1, int* num2){ if(data == nullptr || length < 2) return; int resultExclusiveOR = 0; for(int i = 0; i < length; ++i)...

2018-07-18 08:15:22 115

转载 信号量的实现和应用(二)

信号量的代码实现1,sem_open()原型:sem_t * sem_open(const char *name, unsigned int value)功能:创建一个信号量,或打开一个已经存在的信号量参数:name,信号量的名字。不同的进程可以通过同样的name而共享同一个信号量。如果该信号量不存在,就创建新的名为name的信号量;如果存在,就打开已经存在的名为name的信号...

2018-07-17 10:19:26 1800 3

转载 信号量的实现和应用(一)

生产者-消费者问题从一个实际的问题:生产者和消费者出发,谈一谈为什么需要信号量?信号量用来做什么?问题描述:现在存在一个文件"buffer.txt"作为一个共享缓存区,缓冲区同时最多只能保存10个数。现在一个生产者进程,依次向缓冲区写入整数0,1,2,....,M, M>=500;有N个消费者进程,消费者进程从缓冲区读数,每次读一个,并将读出的数从缓冲区删除。为什么需要信号量?...

2018-07-16 09:59:14 13114 1

转载 丑数

我们把只包含因子2、3和5的数称作丑数(Ugly Number)。求按从小到大的顺序的第1500个丑数。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做第一个丑数。int GetUglyNumber_Solution2(int index){ if(index <= 0) return 0; int *pUglyNumbers = ne...

2018-07-16 09:08:31 103

转载 Longest Substring Without Repeating Characters

Given a string, find the length of the longest substring without repeating characters.Examples:Given "abcabcbb", the answer is "abc", which the length is 3.Given "bbbbb", the answer is "b", with the l...

2018-07-16 09:05:04 84

转载 最长不含重复字符的子字符串

请从字符串中找出一个最长不含重复字符的子字符串,计算该最长子字符串的长度。例如字符串“arabcacfr”中,最长不含重复字符的子字符串是“acfr”,长度为4。思路:cur当前最长,max全局最长;hash数组记录字符对应下标;遍历字符串,如果字符对应hash值小于0,说明字符未出现,cur直接+1即可;如果大于等于0出现了说明重复字符,那就需要判断,如果两次出现长度差d大于cur说明重复字符不...

2018-07-16 09:01:21 177 2

转载 剑指Offer(第二版)面试题46:把数字翻译成字符串

剑指Offer(第二版)面试题46:把数字翻译成字符串题目要求:给定一个数字,按照如下规则翻译成字符串:0翻译成“a”,1翻译成“b”…25翻译成“z”。一个数字有多种翻译可能,例如12258一共有5种,分别是bccfi,bwfi,bczi,mcfi,mzi。实现一个函数,用来计算一个数字有多少种不同的翻译方法。解题思路:下面我们从自上而下和自下而上两种角度分析这道题目,以12258为例:自上而下...

2018-07-16 08:41:23 160

转载 经典回溯算法(八皇后问题)

今天偶尔看到了一个算法问题(八皇后问题),回想一下还是在算法课上学习过的,于是,自己总结了一下,写了这篇日志算法提出:在国际象棋棋盘上(8*8)放置八个皇后,使得任意两个皇后之间不能在同一行,同一列,也不能位于同于对角线上。问共有多少种不同的方法,并且指出各种不同的放法。算法思路:  首先我们分析一下问题的解,我们每取出一个皇后,放入一行,共有八种不同的放法,然后再放第二个皇后,同样如果不考虑规则...

2018-07-12 08:17:07 382 1

转载 进程与线程

进程 和 线程都是动态概念进程 = 资源(包括寄存器值,PCB,内存映射表)+指令序列线程 = 指令序列线程的资源是共享的进程间的资源是独立隔离的,内存映射表不同,占用物理内存地址是分割的线程的切换只是切换PC,切换了指令序列进程的切换不仅切换PC,还包括切换资源,即切换内存映射表用户级线程:调用yield函数,自己主动让出CPU,0.11内核看不见,内核只能看见所属进...

2018-07-10 14:51:27 143

转载 linux系统启动

1

2018-07-04 11:25:24 322

转载 系统调用的实现

1

2018-07-03 14:37:31 2302

转载 二维数组中的查找

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。#include <cstdio>bool Find(int* matrix, int rows, int columns, int number){ bool found = false; ...

2018-07-03 09:11:59 85

转载 不修改数组找出重复的数字

题目:在一个长度为n+1的数组里的所有数字都在1到n的范围内,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但不能修改输入的数组。例如,如果输入长度为8的数组{2, 3, 5, 4, 3, 2, 6, 7},那么对应的输出是重复的数字2或者3。int getDuplication(const int* numbers, int length){ if(numbers ...

2018-07-03 09:00:49 196

转载 找出数组中重复的数字

题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},那么对应的输出是重复的数字2或者3。bool duplicate(int numbers[], int length, int* duplication)...

2018-07-03 08:59:07 223

转载 旋转数组的最小数字

题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组 {3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。int MinInOrder(int* numbers, int index1, int index2);int Min(int* numbers, int le...

2018-07-02 09:16:31 70

转载 0到n-1中缺失的数字

题目:一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0到n-1之内。在范围0到n-1的n个数字中有且只有一个数字不在该数组中,请找出这个数字。int GetMissingNumber(const int* numbers, int length){ if(numbers == nullptr || length <= 0) return ...

2018-07-02 09:12:23 644

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除