内存管理

自学编程方法论:怎么学操作系统

旧巷老猫 提交于 2020-02-25 19:29:24
原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者。 本文思维导图 简介 学习编程,操作系统是你必须要掌握的基础知识,那么操作系统到底是什么呢? 这还用说么,操作系统不就是Windows、Linux、Mac、IOS、Android、IOS这类我们天天都在用的东西么? 此话不假,但是操作系统作为计算机科学里的一门基础学科,肯定不能这么接地气对不对,总的来点高大上的概念,震慑一下你们吧。 根据百度百科的介绍,操作系统是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。 这个介绍足够高大上了吧,那么到底啥是操作系统呢,简单来说,操作系统就是管理计算机硬件和软件资源的一种软件,计算机里的硬盘、鼠标键盘、显示器等设备,都要由它来管理,你打开游戏、打开浏览器或者是看电影,也都要通过操作系统来执行。 没有了操作系统,电脑就失去了灵魂,只是一堆硬件而已。 为什么要学操作系统 了解了操作系统的基本概念之后,接下来我们再来看看,为什么我们要学习操作系统呢? 首先,当然是因为面试要考啦。 其次,无论你学习什么编程语言,和都避免不了和操作系统打交道,比如你学习Java,用到多线程技术

虚拟内存(摘自百度百科)

喜你入骨 提交于 2020-02-25 07:06:11
虚拟内存是计算机系统 内存管理 的一种技术。它使得 应用程序 认为它拥有连续的可用的 内存 (一个连续完整的 地址空间 ), 而实际上,它通常是被分隔成多个 物理内存 碎片,还有部分暂时存储在外部 磁盘存储器 上,在需要时进行 数据交换 。 简介 别称虚拟存储器(Virtual Memory)。电脑中所运行的程序均需经由 内存 执行,若执行的程序占用内存很大或很多,则会导致内存消耗殆尽。为解决该问题, Windows 中运用了虚拟内存 [1] 技术,即匀出一部分硬盘空间来充当内存使用。当内存耗尽时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。若计算机运行程序或操作所需的 随机存储器 ( RAM )不足时,则 Windows 会用虚拟存储器进行补偿。它将计算机的RAM和 硬盘 上的临时空间组合。当RAM运行速率缓慢时,它便将数据从RAM移动到称为“ 分页 文件”的空间中。将数据移入分页文件可释放RAM,以便完成工作。 一般而言,计算机的RAM容量越大,程序运行得越快。若计算机的速率由于RAM可用空间匮乏而减缓,则可尝试通过增加虚拟内存来进行补偿。但是,计算机从RAM读取数据的速率要比从硬盘读取数据的速率快,因而扩增RAM容量(可加内存条)是最佳选择。    虚拟内存不足的成因   【1】、 感染病毒 :有些病毒发作时会占用大量内存空间,导致系统出现 内存不足 问题。   【2】

Linux服务器性能评估

随声附和 提交于 2020-02-24 09:57:58
一、影响 Linux服务器性能的因素 1. 操作系统级 CPU 内存 磁盘 I/O带宽 网络 I/O带宽 2. 程序应用级 二、系统性能评估标准 影响性能因素 影响性能因素 评判标准 好 坏 糟糕 CPU user% + sys%< 70% user% + sys%= 85% user% + sys% >=90% 内存 Swap In(si)=0Swap Out(so)=0 Per CPU with 10 page/s More Swap In & Swap Out 磁盘 iowait % < 20% iowait % =35% iowait % >= 50% 其中: %user:表示CPU处在用户模式下的时间百分比。 %sys:表示CPU处在系统模式下的时间百分比。 %iowait:表示CPU等待输入输出完成时间的百分比。 swap in:即si,表示虚拟内存的页导入,即从SWAP DISK交换到RAM swap out:即so,表示虚拟内存的页导出,即从RAM交换到SWAP DISK。 三、系统性能分析工具 1.常用系统命令 Vmstat、sar、iostat、netstat、free、ps、top等 2.常用组合方式 • 用vmstat、sar、iostat检测是否是CPU瓶颈 • 用free、vmstat检测是否是内存瓶颈 • 用iostat检测是否是磁盘I/O瓶颈 •

C++内存管理转自http://soft.yesky.com/lesson/110/2381610.shtml

拈花ヽ惹草 提交于 2020-02-23 15:04:50
转自 http://soft.yesky.com/lesson/110/2381610.shtml 踏入C++中的雷区——C++内存管理详解 2006-04-25 09:22 作者:蒋涛 出处:计算机教学网 责任编辑:方舟   伟大的Bill Gates 曾经失言:   640K ought to be enough for everybody — Bill Gates 1981   程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本文的内容比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理。    1、内存分配方式   内存分配方式有三种:   (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。   (2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。   (3) 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。    2

Flink的入门

◇◆丶佛笑我妖孽 提交于 2020-02-22 14:34:13
Apache Flink(下简称Flink)项目是大数据处理领域最近冉冉升起的一颗新星,其不同于其他大数据项目的诸多特性吸引了越来越多人的关注。本文将深入分析Flink的一些关键技术与特性,希望能够帮助读者对Flink有更加深入的了解,对其他大数据系统开发者也能有所裨益。本文假设读者已对MapReduce、Spark及Storm等大数据处理框架有所了解,同时熟悉流处理与批处理的基本概念。 Flink简介 Flink核心是一个流式的数据流执行引擎,其针对数据流的分布式计算提供了数据分布、数据通信以及容错机制等功能。基于流执行引擎,Flink提供了诸多更高抽象层的API以便用户编写分布式任务: DataSet API, 对静态数据进行批处理操作,将静态数据抽象成分布式的数据集,用户可以方便地使用Flink提供的各种操作符对分布式数据集进行处理,支持Java、Scala和Python。 DataStream API,对数据流进行流处理操作,将流式的数据抽象成分布式的数据流,用户可以方便地对分布式数据流进行各种操作,支持Java和Scala。 Table API,对结构化数据进行查询操作,将结构化数据抽象成关系表,并通过类SQL的DSL对关系表进行各种查询操作,支持Java和Scala。 此外,Flink还针对特定的应用领域提供了领域库,例如: Flink ML,Flink的机器学习库

Python – 内存管理机制

一笑奈何 提交于 2020-02-22 12:42:12
python引用计数机制 python垃圾回收主要以引用计数为主,标记‑清除和分代清除为辅的机制,其中标记‑清除和分代回收主要是为了处理循环引用的难题. 引用计数算法 当有1个变量保存了对象的引用时,此对象的引用计数就会加1 当使用del删除变量指向的对象时,如果对象的引用计数不为1,比如3,那么此时只会让这 个引用计数减1,即变为2,当再次调用del时,变为1,如果再调用1次del,此时会真的把对象进行删除 python垃圾回收机制 python垃圾回收主要以引用计数为主,标记‑清除和分代清除为辅的机制,其中标记‑清除和分代回收主要是为了处理循环引用的难题. 引用计数算法 当有1个变量保存了对象的引用时,此对象的引用计数就会加1 当使用del删除变量指向的对象时,如果对象的引用计数不为1,比如3,那么此时只会让这个引用计数减1,即变为2,当再次调用del时,变为1,如果再调用1次del,此时会真的把对象进行删除 Python内存管理机制 ​ python 中万物皆对象 ,python的存储问题是对象的存储问题,并且对于每个对象,python会分配一块内存空间去存储它 ​ Python 的内存管理机制: 引入计数、垃圾回收、内存池机制 一、变量与对象 1、变量,通过变量指针引用对象 变量指针指向具体对象的内存空间,取对象的值. 2、对象,类型已知,每个对象都包含一个头部信息

内存管理:野指针以及非法内存操作

*爱你&永不变心* 提交于 2020-02-21 22:55:19
如果一个指针指向的内存没有访问权限,或者指向一块已经释放的内存,那么就无法对该指针进行操作,这样的指针称为野指针。 规避野指针 指针变量如果暂时不需要赋值,以定要初始化为nullptr,因为任何指针变量被创建时不会自动成为nullptr,它的缺省值是随机的。 当指针指向的内存被释放时,要将指针的值设置为nullptr,因为free()只是释放掉了内存,并未改变指针的值。 来源: https://www.cnblogs.com/xiaobaizzz/p/12343485.html

php内存管理机制、垃圾回收机制

青春壹個敷衍的年華 提交于 2020-02-21 11:31:20
一、内存管理机制 先看一段代码: <?php //内存管理机制 var_dump(memory_get_usage());//获取内存方法,加上true返回实际内存,不加则返回表现内存 $a = "laruence"; var_dump(memory_get_usage()); unset($a); var_dump(memory_get_usage()); //输出(在我的个人电脑上, 可能会因为系统,PHP版本,载入的扩展不同而不同): //int 240552 //int 240720 //int 240552 定义变量之后,内存增加,清除变量之后,内存恢复(有些可能不会恢复和以前一样),好像定义变量时申请了一次内存,其实不是这样的,php会预先申请一块内存,不会每次定义变量就申请内存。 首先我们要打破一个思维: PHP不像C语言那样, 只有你显示的调用内存分配相关API才会有内存的分配. 也就是说, 在PHP中, 有很多我们看不到的内存分配过程. 比如对于: $a = "laruence"; 隐式的内存分配点就有: 1.1. 为变量名分配内存, 存入符号表 2.2. 为变量值分配内存 所以, 不能只看表象. 第二, 别怀疑,PHP的unset确实会释放内存, 但这个释放不是C编程意义上的释放, 不是交回给OS. 对于PHP来说,

Linux内存管理源码剖析(三)

一个人想着一个人 提交于 2020-02-21 11:22:53
一、小块内存分配 前面剖析了Linux分配大块内存的机制,也清楚了物理内存的组织机制,本次先来讲述小块内存的分配机制。 从fork创建一个进程开始讨论 经过在系统调用表sys_call_table中的查找之后会调用系统调用sys_fork,sys_fork又调用_do_fork函数,主要做两件事,第一复制父进程的task_struct结构,第二唤醒这个新创建的进程: SYSCALL_DEFINE0 ( fork ) { //linux-4.13.16\kernel\fork.c return _do_fork ( SIGCHLD , 0 , 0 , NULL , NULL , 0 ) ; } long _do_fork ( unsigned long clone_flags , unsigned long stack_start , unsigned long stack_size , int * parent_tidptr , int * child_tidptr , unsigned long tls ) { struct task_struct * p ; 。。。 /* copy_process复制进程结构*/ p = copy_process ( clone_flags , stack_start , stack_size , child_tidptr , NULL ,

Linux线程栈内存总结

落爺英雄遲暮 提交于 2020-02-20 17:57:42
何为线程栈空间泄露? 何为anon内存? 虚拟内存、物理内存、anon内存的联系 anon与线程的联系 glibc源码库线程创建与销毁anon关系 使用pmap分析虚拟地址空间以及anon内存 何为线程栈空间泄露? 【栈空间泄露】:简单了说就是,创建了线程,系统分配了内存,但是由于异常操作,没有把之前申请的内存还给操作系统,缓存在进程中,导致这块的内存被占用,系统无法分配内存给其他进程。 从用户角度,线程创建后,未设置线程为detach属性,pthread_detach()、pthread_join()销毁函数。 从内存映射角度,在进程中缓存一些无法利用的anon内存。 从系统栈空间分配角度,这些运行结束但是未销毁的线程,既不放在stack_used队列里,也不放在stack_cache,从而线程栈空间不会被调度到。 何为anon内存? 仅个人观点,在操作系统上运行进程,其实是经过两次映射。一次是用户程序到系统配置器分配的虚拟内存申请,一次是虚拟地址空间到物理空间地址的映射,如果是第二次映射建立前,在申请物理空间,未填充物理页内容,建立映射后,仅仅代表已经分配了内存anon,ps:物理空间最小管理单元是“页”。 虚拟内存 操作系统给用户程序的假象地址,与物理内存建立映射关系。 物理内存 类似物理存储器DRAM anon内存 1.调用malloc、brk