- 博客(18)
- 收藏
- 关注
原创 python垃圾回收机制
python垃圾回收机制引用计数python中,主要依靠gc模块的引用计数来进行垃圾回收,以标记-清除和分代回收作为辅助手段。所谓引用计数就是给所有的对象维护一个引用计数的属性,在一个引用被创建或复制的时候,python就把相关对象的引用计数+1:相反,当引用被销毁的时候就把相关对象的引用计数-1。当某个对象的引用计数减到0时,自然就可以认为整个python中不会再有变量引用这个对象,所以就可以把这个对象占据的存储空间释放出来了。导致引用计数+1的情况对象被创建,例如:a = 1对象被引用,例如
2022-02-08 14:07:33 401
原创 python默认参数的坑
在工作中不小心踩了一个关于python默认参数的坑,这里记录一下。先看一下例子:def fuc(data=[]): data.append(1) return dataprint(fuc())print(fuc())print(fuc())[1][1, 1][1, 1, 1]{('a', 'b'): 1}可以发现输出并不像我们想象中的都是[1],这是因为,调用fuc函数操作的都是同一个列表对象,因此我不停的调用fuc函数变成了往列表中追加元素。造成这种现象的原因是,
2022-02-07 14:29:13 935
原创 程序媛实习生的Git入门笔记
Git简介git是目前世界上最先进的分布式版本控制系统,没有之一。git是Linus花了两周自己用c写的一个分布式版本控制系统。集中式和分布式版本控制系统有什么区别呢?集中式版本控制系统集中式版本控制系统的版本库是存放在中央服务器的,工作的时候需要先从中央服务器取得最新的版本,结束后再推送给中央服务器。中央服务器就类似一个图书馆的角色。集中式版本控制最大的缺点就是必须联网才能工作,遇到网速慢的时候,效率非常低。分布式版本控制系统分布式版本控制系统没有“中央服务器”的概念,每个人电脑上都是一个
2021-04-25 11:05:36 258
原创 python垃圾回收机制
python垃圾回收机制引用计数python中,主要依靠gc模块的引用计数来进行垃圾回收。所谓引用计数就是给所有的对象维护一个引用计数的属性,在一个引用被创建或复制的时候,python就把相关对象的引用计数+1:相反,当引用被销毁的时候就把相关对象的引用计数-1。当某个对象的引用计数减到0时,自然就可以认为整个python中不会再有变量引用这个对象,所以就可以把这个对象占据的存储空间释放出来了。引用计数技术在每次引用创建和销毁时都要多做一些操作,这可能是一个小缺点,当创建和销毁很频繁时难免带来一些效率
2021-04-22 18:32:01 126
原创 python中isinstance函数不能区分int型与布尔型的问题_
这个事我应该不是地球上最后一个知道的吧( ╯□╰ )前一段时间写代码中一个参数使用isinstance函数限制了数据类型为int,后来测试小姐姐来找我说输入为布尔类型时没有像预期的报参数有误~然后我就试了下:a='hello word'b=1c=Trueisinstance(a,int)Falseisinstance(b,int)Trueisinstance(c,int)True查了查资料,isinstance()与type()的区别如下:type()不会认为子类是一
2021-02-04 11:50:05 853 1
原创 重装系统or更换电脑后重新部署hexo
title: 重装系统or更换电脑后重新部署hexodate: 2018-11-25 21:52:40tags:hexo本来觉得关于hexo搭建的文章网上一搜一大堆自己不用写了,后来在经历了一次重装系统和一次换电脑后,发现写这个东西不是给别人看的,是给我寄几。。。要拷贝的文件1 _config.yml:站点配置文件2 theme:主题文件3 source:这个肯定是要拷贝,里面有写的博客文件4 scaffolds:文章模板5 package.json:说明使用哪些包6 .gi.
2020-05-29 11:51:26 389
转载 codeblocks 常用快捷键
Ctrl+Z :撤销Ctrl + Shift + Z :重做(Redo)Ctrl + F:查找 Ctrl + F3:查找下一个Shift+F3 查找前一个Ctrl + R 替换Ctrl + PageUp 从当前函数跳到上一个函数的开始Ctrl + PageDown 从当前函数跳到下一个函数的开始Alt + N 符号重命名(重构)Shift + S...
2018-09-09 15:54:41 581
原创 xv6源码分析—第一个用户进程
关于进程 进程是一个抽象概念,它让一个程序可以假设它独占一台机器。进程向程序提供“看上去”私有的,其他进程无法读写的内存空间,以及“看上去”仅执行该程序的CPU。xv6使用页表(硬件)来为每个进程提供其独有的地址空间,页表将虚拟地址映射为物理地址。 xv6为每个进程虚拟出一个0xFFFFFFFF的内存地址,包含了从虚拟地址0开始的用户内存。它的地址最低处放置进程...
2018-07-24 19:42:24 3868 1
原创 Xv6源码分析——内存管理
内存管理主要分为两大部分,第一部分是内核的物理内存分配程序,以便内核可以分配内存并稍后释放它。 分配器将以4096字节为单位进行操作,称为页面。内核会维护记录哪些物理页面是空闲的和哪些已分配的数据结构,以及每个页面的进程数量,以及如何分配和释放内存页面。内存管理的第二个组成部分是虚拟内存,它将内核和用户软件使用的虚拟地址映射到物理内存中的地址。 当指令使用内存时,x86硬件的内存管...
2018-07-24 19:41:41 3348
原创 Xv6源代码之boot
一 基本原理 计算机加电启动后,CPU一开始会执行称为BIOS(基本输入/输出系统)的程序,该程序存储在主板上的非易失性存储器(ROM)中。 BIOS的工作是准备硬件,然后将控制权交给操作系统。具体来说,计算机系统的 BIOS 在完成一系列的初始化后会选择一个启动设备(例如硬盘、光盘、软盘等),并且读取该设备的第一扇区(磁盘最开始的 512 个字节),如果发现它以 0xaa55 结...
2018-07-24 19:41:23 722
原创 GDT加载过程分析
# Bootstrap GDT.p2align 2 # force 4 byte alignment 向后移动位置计数器置为4字节的倍数 为了内存对齐gdt: SEG_NULLASM # null seg SEG_ASM(STA_X|STA_R, 0x0, 0xfff...
2018-07-24 19:41:00 2132 1
翻译 6.828 Xv6实验工具指导
6.828实验工具指南 熟悉您的环境对于高效开发和调试至关重要。 本页简要介绍了JOS环境以及有用的GDB和QEMU命令。 阅读GDB和QEMU手册,这些是让你知道如何使用的强大工具。调试提示:内核用户环境参考:JOS makefile JOS obj / GDB QEMU调试提示内核 GDB是你的朋友。使用qemu-gdb(或其qemu-gdb-nox...
2018-07-24 19:40:22 1950
翻译 Xv6相关编译调试环境配置6.828
6.828中使用的工具 你将在这个课程中使用两套工具:一个x86模拟器,QEMU,用于运行你的内核; 和一个编译器工具链,包括汇编器,链接器,C编译器和调试器,用于编译和测试你的内核。此页面提供您需要下载并安装自己的副本的信息。这个课程假定你熟悉Unix命令。 我们强烈建议使用Debathena机器,例如athena.dialup.mit.edu来实验室。如果您使用运行...
2018-07-24 19:39:22 1362
转载 关于qemu
一、什么是Qemu?Qemu 是纯软件实现的虚拟化模拟器,几乎可以模拟任何硬件设备,我们最熟悉的就是能够模拟一台能够独立运行操作系统的虚拟机,虚拟机认为自己和硬件打交道,但其实是和 Qemu 模拟出来的硬件打交道,Qemu 将这些指令转译给真正的硬件。正因为 Qemu 是纯软件实现的,所有的指令都要经 Qemu 过一手,性能非常低,所以,在生产环境中,大多数的做法都是配合 KVM 来完成虚拟化工作...
2018-04-09 09:24:06 3995 1
转载 linux内核调试+qemu+eclipse中遇到的问题
Description:无法获得锁 /var/lib/dpkg/lock - open (11 Resource temporarily unavailable)Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?Solution:移除 /var/lib/dpkg/ 文件...
2018-04-07 14:47:30 295
转载 Python GUI编程之 Tkinter 菜单
1、使用Menu类创建一个菜单2、add_command添加菜单项,如果该菜单是顶层菜单,则添加的菜单项依次向右添加。 如果该菜单时顶层菜单的一个菜单项,则它添加的是下拉 菜单的菜单项。 属性: label:指定菜单的名称 command:被点击时调用的方法 acceletor:快捷键 underline:是否拥有下划线3、窗口的menu属性:指定顶级菜单项 应用场景...
2018-03-28 15:48:06 8201 1
转载 Python GUI编程 之Tkinter 基本参数
基本参数1、使用tkinter.Tk() 生成主窗口(root=tkinter.Tk());root.title('标题名') 修改框体的名字,也可在创建时使用className参数来命名;root.resizable(0,0) 框体大小可调性,分别表示x,y方向的可变性;root.geometry('250x150') 指定主框体大小;root.quit() ...
2018-03-28 13:04:57 1514 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人