- 博客(16)
- 收藏
- 关注
转载 malloc底层实现原理
Linux的虚拟内存管理有几个关键概念:Linux 虚拟地址空间如何分布?malloc和free是如何分配和释放内存?如何查看堆内内存的碎片情况?既然堆内内存brk和sbrk不能直接释放,为什么不全部使用 mmap 来分配,munmap直接释放呢 ?Linux的虚拟内存管理有几个关键概念:1、每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址;2、虚拟地址可通过每个进程上的页表(在每个进程的内核虚拟地址空间)与物理地址进行映射,获得真正物理地址;3、如果虚拟地址对应物理...
2022-03-31 15:54:59
7213
6
原创 C/C++内存管理
1.C/C++中的内存分布在C/C++程序运行起来之后,内存分布情况如图栈又叫堆栈,非静态局部变量/函数相关的一些数据:形参,局部变量表达式中间结果,寄存器信息/返回值等等,栈是向下增长的,从高地址向低地址依次存放。 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。(Linux课程如果没学到这块,现在只需要了解一下) 堆用于程序运行时动态内存分配(malloc,calloc,realloc等),堆是可以上增长的,从.
2022-03-26 16:55:39
545
10
原创 C++类与对象(下)
再谈构造函数构造函数体赋值在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。class Date{public: Date(int year, int month, int day) { _year = year; _month = month; _day = day; } private: int _year; int _month; int _day;};虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称作为
2022-03-21 22:11:13
1290
7
原创 C++类与对象 (中)
类的6个默认构造函数class Date(){}如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情 况下,都会自动生成下面6个默认成员函数。构造函数,析构函数用:来进行对象创建时初始化工作和对象销毁时候的资源清理工作 拷贝构造函数,赋值运算符重载:用来进行对象拷贝 普通对象和const对象取地址:这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需要重载,比如想让别人获取到指定的内容。...
2022-03-19 17:10:09
2424
12
原创 C++ 类和对象
类和对象目录类和对象面向过程和面向对象的区别类和对象定义类的格式定义类的方式类的作用域面向对象特性封装C++程序设计中是如何体现封装性的访问限定符类的实例化类的大小this指针this指针的特性汇编角度来看this函数参数调用约定this指针的存放位置This指针是否可以为空面向过程和面向对象的区别C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 ...
2022-03-14 22:23:42
1700
12
原创 栈与队列的互相实现
用栈实现队列解析根据栈与队列的特性我们用两个栈来模拟实现队列。首先s1用来模拟入队列,s2用来模拟出队列。入队列时直接将元素放入s1中,出队列时,如果s2为空,那么将s1中的元素push到s2中此时元素是逆序的s2的栈顶就是队头,并删除s2栈顶,若s2不为空则直接删除s2栈顶。获取队头与出队列操作相似,将删除操作改为返回操作即可。2.代码实现栈的基本操作typedef int STDataType;typedef struct Stack{ STDataType* array; //
2022-01-20 16:19:17
497
原创 删除有序数组中的重复项
删除有序数组中的重复项给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。首先定义三个变量用来保存下标,src1,src2用来对比和遍历,ret用来记录删除重复项之后的数组的要打印的元素个数,若s1等于s2,s2向后遍历到s1与s2首次不相等的位置,把s1也放到s2的位置,此时将ret++,意为新找到了一个不同的元素,并把nums[s1]赋
2021-11-27 17:31:31
479
原创 数组的轮转
轮转数组给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。**方法一:使用额外的数组我们可以使用额外的数组来将每个元素放至正确的位置。用 n表示数组的长度,我们遍历原数组,将原数组下标为 i的元素放至新数组下标为 (i+k)mod n 的位置,最后将新数组拷贝至原数组即可**void rotate(int* nums, int numsSize, int k) { int newArr[numsSize]; for (int i = 0; i <
2021-11-27 17:00:15
1024
原创 DataStruct单链表的基本操作
什么是单链表?单链表(Linked List):由各个内存结构通过一个next指针链接在一起组成,每一个内存结构都存在后继内存结构(链尾除外),内存结构由数据域和next指针域组成。Data 数据 + Next 指针,组成一个单链表的内存结构;第一个内存结构称为 链头,最后一个内存结构称为 链尾;链尾的 Next 指针设置为 NULL (指向空);单链表的方向单一(只能从链头一直遍历到链尾)单链表的基本操作单链表的结构体定义typedef int DataType;typedef struct
2021-11-27 16:31:02
790
1
原创 字符串和内存相关函数的实现
strlen函数函数声明:size_t strlen(const char*string)用于计算字符串的长度(不包括\0),返回值为size_t类型,返回字符串的长度(不包括\0)模拟实现strlen使用计数器的方法模拟实现size_t My_strlen(const char* str) { assert(str != NULL); int count=0; while (*str!= '\0') { str++; count++; } return count;}i
2021-11-05 21:02:21
126
1
原创 c语言实现简单的通讯录功能
c语言实现的简单的通讯录功能利用结构体实现了简单的通讯录功能//通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址//提供方法://添加联系人信息//删除指定联系人信息//查找指定联系人信息//修改指定联系人信息//显示所有联系人信息//清空所有联系人//以名字排序所有联系人#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#inclu
2021-11-03 21:41:38
411
1
原创 c语言实现简单的命令行扫雷游戏
c语言实现简单的命令行扫雷游戏#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <time.h>#include <stdlib.h>#define ROW 9 //雷区行大小#define COL 9 //雷区列大小#define ROWi ROW+2 //代码层雷区行大小#define COLi COL+2 //代码层雷区列大小#d
2021-10-28 11:06:34
2586
1
原创 关于sizeof 和strlen的一些易混淆的题目**
**关于sizeof 和strlen的一些易混淆的题目**sizeof()是运算符,大部分编译程序在编译时已经将它计算过了,sizeof()是计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示(当然用在字符数组计算"\0"的大小),在32和64位操作系统中计算出的值有可能不同。而strlen是函数,该函数就是求参数 s指向字符串的长度。C语言规定,字符串必须以’\0’字符作为最后一个字符,表示字符串的结束字符,称为:字符串结束符。字符串结束符’\0’的ASCII是0数值,strlen
2021-10-28 09:48:25
164
1
原创 2021-09-23
是一名普通的计算机专业的学生,来记录一下自己的学习历程。学习的目标是成为技术大牛,为此需要坚持不懈的每天敲代码。每周花费20-30小时最想进入的公司是tencent
2021-09-23 16:55:37
134
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人