C/C++内存管理 C/C++内存分布 问题引入: 1234567891011121314151617181920212223242526272829int globalVar = 1;static int staticGlobalVar = 1;void Test(){ static int staticVar = 1; int localVar = 1; int num1[10] = { 1, 2, 3, 4 }; char char2[] = "abcd"; const char* pChar3 = "abcd"; int* ptr1 = (int*)malloc(sizeof(int) * 4); int* ptr2 = (int*)calloc(4, sizeof(int)); int* ptr3 = (int*)realloc(ptr2, sizeof(int) * 4); free(ptr1); free(ptr3);}1. 选择题:选项 : A.栈 B.堆 C.数据段(静态区) D.代码段( ...
Linux
未读操作系统(OS)的基础概念 操作系统是计算机硬件和软件之间的中介,它负责管理计算机硬件资源并为应用程序提供一个运行环境。简单来说,操作系统的目标是使计算机变得更好用。它使得硬件的复杂性对用户透明,提供更高效的资源管理,并使应用程序能够正常运行。 1. 操作系统的层次结构 操作系统通常由多个层次构成,每一层提供不同的功能: 硬件层(硬件) 这是计算机的基础物理部分,包括 CPU、内存、硬盘、显示器、键盘等。硬件直接提供计算和存储资源。 设备驱动层 这一层负责控制和管理硬件设备,如声卡、显卡、打印机等。操作系统通过设备驱动程序与硬件进行通信,确保硬件的正常运行。 操作系统层 这一层是操作系统的核心部分,负责管理硬件资源,调度进程,提供文件管理、内存管理等基本功能。常见的操作系统包括 Windows、Linux、macOS 等。 应用软件层 最顶层是应用软件,它包括各种应用程序,如 Word、Matlab 等。用户通过这些软件与计算机互动,完成各种任务。 2. 操作系统的功能 资源管理 操作系统需要高效管理计算机的资源,如 CPU 时间、内存、磁盘存储等。它通过调度算法分配资源,确保每 ...
在 Linux 系统中管理用户账户:创建、设置密码及删除操作 1. 创建新用户 在 Linux 系统中,我们可以使用 adduser 或 useradd 命令来创建新用户。推荐使用 adduser 命令,因为它相对简单,且可以交互式地引导你完成用户创建过程。 创建新用户命令: 1adduser 用户名 这里,用户名 是您自定义的用户名称。假设我们要创建一个名为 friend 的新用户,那么命令应该是: 1adduser friend 执行该命令后,系统将自动创建一个新的用户账户。具体操作步骤如下: 在 /home 目录下为该用户创建一个子目录(即 home/friend)。 配置默认的 shell(通常是 /bin/bash)。 创建该用户的相关信息文件,并将用户信息记录到 /etc/passwd 文件中。 示例输出: 1[root@server]# adduser friend 执行该命令后,系统会创建新用户,并在终端中显示相关信息。 2. 为新用户设置密码 在创建新用户后,我们需要为该用户设置一个密码。可以使用 passwd 命令来设置用户密码。 设置密码命令: 1passwd ...
Linux 环境搭建全解析:从历史到实践 Linux 作为开源操作系统,已经成为了当今信息技术领域的重要组成部分。无论是服务器、桌面,还是嵌入式设备,Linux 的身影几乎无处不在。那么,Linux 究竟是如何发展而来的?它又是如何在当今的技术世界中占据一席之地的?本篇博客将从 Linux 的历史背景出发,逐步讲解如何在 Linux 环境下进行开发与管理,最后提供具体的 Linux 环境搭建教程。 一、Linux 的起源与发展 1.1 UNIX 的历史背景 在深入探讨 Linux 之前,我们需要了解它的前身——UNIX。UNIX 的诞生始于 1969 年,由 AT&T 贝尔实验室的 Ken Thompson 和 Dennis Ritchie 等人开发。最初,UNIX 被设计为一种多任务、多用户的操作系统,能够有效地支持科研工作。UNIX 继承了当时 Multics 操作系统的部分思想,但它的设计更加简洁和高效,这使得 UNIX 逐渐成为主流操作系统之一。 随着 UNIX 的逐步发展,不同的版本也相继诞生,包括伯克利软件发行版(BSD)和 System V。这两个版本代表了 UN ...
C++
未读1. 再谈构造函数 在面向对象编程中,构造函数 是一种特殊的成员函数,它在对象创建时自动调用,负责初始化对象的成员变量(创建对象时赋初值),确保对象在创建时有一个有效的状态。接下来,我们将详细讲解关于构造函数的几个重要概念。 1.1 构造函数体赋值 当我们创建一个对象时,构造函数会被自动调用,用来给对象的各个成员变量提供一个初始值。例如: 123456789class MyClass{public: int a; MyClass() { a = 10; // 这里是构造函数体中的赋值操作 }}; 在这个例子中,构造函数的作用是将 a 赋值为 10。然而,这里要注意,构造函数体中的赋值操作和初始化是有区别的。构造函数体中对成员变量的赋值只能算是给成员变量“赋初值”,而不是“初始化”。因为初始化是指给成员变量设置一个初始值,而且初始化只能发生一次,而赋值操作可以发生多次。 再例如: 12345678910111213class A{ int _x;public: A(int x) & ...
C++
未读1. 类的 6 个默认成员函数 默认成员函数的含义: 即使一个类什么都不写,编译器也会默认生成 4 以下个成员函数: 默认构造函数(初始化对象时调用)。 拷贝构造函数(用已有对象创建新对象时调用)。 析构函数(对象生命周期结束时调用)。 赋值运算符重载(用 = 赋值时调用)。 可以直接使用的操作符: 取地址操作符 &。 常量取地址操作符 const &。 代码示例: 12345678910111213141516#include <iostream>using namespace std;class Example{ // 空类,未显式定义任何成员函数};int main(){ Example e1; // 调用默认构造函数 Example e2 = e1; // 调用拷贝构造函数 Example* ePtr = &e1; // 调用取地址操作符 return 0; // 在程序结束时,e1 和 e2 调用析构函数} 传道解惑: Q1: ...
C++
未读一、本节目标 面向过程和面向对象初步认识 类的引入 类的定义 类的访问限定符及封装 类的作用域 类的实例化 类的对象大小的计算 类成员函数的 this 指针 二、面向过程和面向对象初步认识(过程与面向对象编程) 面向过程编程(ProceduralProgramming): 关注“过程”或“步骤”。 将问题分解为函数,每个函数执行一个特定的任务。 主要依赖函数调用,常见于 C 语言。 12345678910111213#include <stdio.h>// 面向过程编程: 通过函数处理数据void process(int data){ printf("Processing data: %d\n", data);}int main() { int data = 42; process(data); return 0;} 面向对象编程(Object-OrientedProgramming): 关注“对象”,将数据与操作数据的方法结合。 通过对象之间的交互解决问题,常见于 C++。 1 ...
同款博客网站搭建教程 声明:本篇文章是介绍安知鱼博客网站的搭建及其魔改,对待 0 基础的朋友比较不友好,但你仍然可以凭借好的学习能力和借助 B 站、AI、百度等完成个人网站的搭建!如有不懂可在文章下方评论区评论,我会尽力解答…… 1. hexo 和 安知鱼主题的安装 前提必备技能:GitHub 仓库的基本使用以及 VS Code 的基本使用! 环境与工具准备(最好可以稳定连接 GitHub) Git - 下载 Node.js — Download Node.js®(这里选用 v18.17.1 到 22.16.0 版本兼容性较好,请确保勾选 Add to PATH 选项(默认已勾选)) 安装完成后,检查是否安装成功。在键盘按下 win + R 键,输入 CMD,然后回车,打开 CMD 窗口,执行 node -v 命令,看到版本信息,则说明安装成功。 文本编辑器:VS Code 下载(推荐) 或者 Trae - AI 原生 IDE 下载(看个人,选任意一个或者都选都可以) 后续的 hexo cl;hexo g;hexo s 命令可能执行会出问题,解决方法:使用管理 ...
灵光荟萃
未读常见技术文档 SSG 对比表 名称 技术栈 上手难度 实用程度 优点 缺点 VitePress Vue 3 + Vite ★★★☆☆(中等) ★★★★★ 极快的热更新,配置极简,支持 Markdown 与 Vue 组件混用,中文文档完善,生态新潮 主题生态没 VuePress 丰富,对老 Vue 2 插件兼容性较弱 VuePress Vue 2.x / 3.x ★★☆☆☆(较简单) ★★★★☆ 中文社区成熟,主题/插件多,适合做博客/文档双用 构建速度不如 VitePress 快,配置稍复杂 Docsify 纯前端(Vue 驱动) ★☆☆☆☆(极易) ★★★☆☆ 不需要构建步骤,纯前端渲染,直接放 Markdown 即可上线,超轻量 SEO 不友好(纯前端渲染),大型站点性能差,功能简单 Docusaurus React + Node.js ★★★★☆(中等偏难) ★★★★★ Facebook 出品,React 生态强大,版本化/多语言/Algolia 搜索支持优秀 React 知识门槛较高,主题自定义需要 React/JSX Nextra (Next.j ...
Obsidian
未读Obsidian 的实用技巧 光头 obsidian 教程 | B 站 1. 正反向链接(双链) 1. 用来干什么 双链的核心是“建立笔记之间的关系”。写着很复杂的文件夹时可以靠链接把内容串起来,反向链接会自动整理“谁用到了我”。 2. 正向链接怎么写(最常用的 5 种) 链接到一整篇笔记:输入 [[ 会自动弹出可选笔记,回车就建好了。 1[[目标笔记名]] 链接到某个标题:适合做目录跳转,比如一篇长笔记里的某一节。 1[[目标笔记名#标题]] 链接到某一段文字(块链接):块链接适合“引用一段结论/定义/原话”,以后多篇笔记都能引用同一段,避免复制粘贴导致版本不一致。获取块链接常用方法:把鼠标放在段落上,菜单里找“复制块链接”;或者输入 [[目标笔记名#^ 让 Obsidian 自动提示可选块。 1[[目标笔记名#^块ID]] 给链接换个显示名字:比如不想正文里出现笔记文件名,就用这个。 1[[目标笔记名|显示成这句话]] 嵌入(把内容直接显示在当前笔记里):嵌入适合做“摘录区/引用区”,让当前笔记直接展示另一篇笔记的一部分内容。 123![[目标笔记名]]![[目标笔记名#标题] ...











