inline关键字 作用:避免频繁调用函数对栈内存重复开辟所带来的消耗。 在 c/c++ 中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了 inline 修饰符,表示为内联函数。 栈空间就是指放置程序的局部数据(也就是函数内数据)的内存空间。 在系统下,栈空间是有限的,假 ...
分类:
编程语言 时间:
2020-03-17 08:09:01
阅读次数:
63
并发编程 Goroutine Goroutine是Go语言特有的并发体,是一种轻量级的线程,由go关键字启动。在真实的Go语言的实现中,goroutine和系统线程也不是等价的。 一个Goroutine会以一个很小的栈启动(可能是2KB或4KB),当遇到深度递归导致当前栈空间不足时Goroutine ...
分类:
其他好文 时间:
2020-03-15 00:05:51
阅读次数:
67
1、ARM内部寄存器:设计在CPU内部 (1)特点:速度快 (2)数量:一共有37个: 6个状态寄存器; 31个通用寄存器(R0-R12) R13(SP):栈指针,不同模式下栈空间是不一样的 R14(LR):链接寄存器(存放断点),硬件自动完成 R15(PC):程序指针,取指令的位置 在FIQ模式下 ...
分类:
其他好文 时间:
2020-03-06 15:23:27
阅读次数:
79
ARM-CM3创建任务、开启调度器、任务调度的整个流程: 【创建任务】 创建任务控制块。为任务申请空间并创建一个任务控制块NewTCB; 申请任务栈空间。为任务申请一块栈空间,并将起始地址存储到NewTCB.pxStack中; 初始化任务相关参数。将任务名、优先级和相关列表项等存放到任务控制块; 初 ...
分类:
其他好文 时间:
2020-03-04 21:15:31
阅读次数:
99
递归程序在设计时很常见,有时能很大程度上简化问题解决的复杂性. 下面就算法导论的2.3-4习题进行解答. 具体就是写出插入排序的递归版本. 1 void insert_sort(int a[],int n) 2 { 3 if(n==1) return ; 4 else 5 { 6 insert_so ...
分类:
编程语言 时间:
2020-03-01 14:25:00
阅读次数:
94
BFS: 1. 所需空间是指数级别的,大 2. 自己开队列存,不会有爆栈的风险 3. 能最先搜出最短路径长的结果 DFS: 1. 所需空间和深度成正比,小 2. 直接用递归栈的话,有爆栈的风险。C++给分配的栈空间大概就4M,所以大概可以搜10万层 3. 不能先搜出最短路径长的结果 4. 直接用递归 ...
分类:
其他好文 时间:
2020-03-01 12:23:14
阅读次数:
122
如何看待 内存 ? 可以存放数据 数据段 自己定义的数据 可以存放指令 指令段 自己定义的指令 可以定义成栈空间 栈段 临时存放数据 那么如何让 CPU 按照我们的意愿去访问内存? 对于数据段,我们需要有段地址+偏移地址,目前段地址寄存器只学过 ds 寄存器, 偏移地址只学过 [0],[1] ... ...
分类:
编程语言 时间:
2020-02-28 22:45:43
阅读次数:
63
栈里的对象 "构造完毕,请睁开眼吧!",迷迷糊糊中,听着这个声音,我睁开了眼睛,一位小哥映入眼帘。 “你是谁?我是谁?这又是什么地方?”,我的大脑一片空白。 “你是一个C++对象,这里是栈空间。我是创建你的线程,你先待着,一会儿会用到你,拜~” “唉,等一下...”,还没等我回过神,小哥已经走远。 ...
分类:
其他好文 时间:
2020-02-08 18:05:07
阅读次数:
86
1. 简而言之,数组定义在函数中时,占用的内存来自栈空间,栈空间是在进程创建时初始化的,有固定的大小,一般很小,所以太大的数组会耗光栈空间。全局变量一般分配在数据段,可以比较大。 2.BBS段、数据段、代码段、堆与栈及5大内存分配 BSS段(Block Started by Symbol): BSS ...
分类:
编程语言 时间:
2020-02-04 10:30:37
阅读次数:
97
多线程程序在单核上运行,就是并发 多线程程序在多核上运行,不是并行 Go协程和Go主线程 Go主线程(线程):一个Go线程上,可以起多个协程 ,你可以这样理解,协程是轻量级的线程 Go协程的特点: 1)有独立的栈空间 2)共享程序堆空间 3) 调度由用户控制 4)协程是轻量级的线程3 gorouti ...
分类:
其他好文 时间:
2020-02-04 00:54:45
阅读次数:
85