计算机学习
tsz danger
这个作者很懒,什么都没留下…
展开
-
c++结构体几种初始化方法
很久没用过结构体了,稍微复习一下。第一种,通过冒号初始化结构体名(传入参数): 成员变量1(参数1),成员变量2(参数2){};struct Entry{ Keytype _key; Valuetype _value; Entry(Keytype key=NULLKEY,Valuetype value=0): _key(key),_value(value){}};int main(){ Entry a; Entry b(2,3); cout&l原创 2020-08-07 20:17:52 · 20282 阅读 · 0 评论 -
DFPC的FRFCFS详解
下面给出DFPC的FRFCFS解析首先看看头文件里面多出了什么//EDFPCscheme#define SAMPLECOUNT 128#define FPCCOUNT 3#define BDICOUNT 8#define DYNAMICWORDSIZE 8 //chars原创 2020-03-31 10:33:46 · 2525 阅读 · 0 评论 -
C++ operator重载的实例
#include <iostream>using namespace std;class temp{public: int operator>(const temp& k) { if (this->a >k.a) { return 1; } else { return 0; } } temp(int a1, i...原创 2020-03-27 10:51:02 · 961 阅读 · 0 评论 -
C和C++的区别
在很大程度上,C++是C的超集,这意味着一个有效的C程序也是一个有效的C++程序。“你把.c改成.cpp,就成了c++ -------鲁迅(我没说过)”C和C++的主要区别是,C++支持许多附加特性。但是, C++中有许多规则与 C 稍有不同。这些不同使得 C 程序作为C++程序编译时 可能以不同的方式运行或根本不能运行。本节着重讨论这些区别。如果使用 C++的编译器编译C程序,就知道这...原创 2020-03-24 10:23:18 · 1938 阅读 · 0 评论 -
C语言 的内联函数
通常,函数调用都有一定的开销,因为函数的调用过程包括建立调用、 传递参数、跳转到函数代码并返回。使用宏使代码内联,可以避免这样的开 销。C99还提供另一种方法:内联函数(inline function)。可能顾名思义地认为内联函数会用内联代码替换函数调用。其实C99和C11标准中叙述 的是:“把函数变成内联函数建议尽可能快地调用该函数,其具体效果由实 现定义”。因此,把函数变成内联函数,编译器...原创 2020-03-24 10:07:50 · 3159 阅读 · 0 评论 -
C/C++的预定义宏
C标准规定了一些预定义宏C99 标准提供一个名为_ func 的预定义标识符,它展开为一个代表函数名的字符串(该函数包含该标识符)。那么, func 必须具有函数作用域,而从本质上看宏具有文件作用域。因此, func _是C语言的预定义标识符,而不是预定义宏。注意,其中一些是C99 新增的,所以不支持C99的编译器可能无法识别它们。如果使用 GCC,必须设置-std=c99或-std=c11...原创 2020-03-24 09:53:15 · 1081 阅读 · 0 评论 -
C/C++ #include详解
什么是#include指令当预处理器发现#include 指令时,会查看后面的文件名并把文件的内容包含到当前文件中,即替换源文件中的#include指令。这相当于把被包含文件的全部内容输入到源文件#include指令所在的位置。#include指令有两种形式:#include <stdio.h> ←文件名在尖括号中#include "mystuff.h" ←文件名在...原创 2020-03-24 09:48:23 · 25608 阅读 · 2 评论 -
C/C++ #define详解
#define预处理器指令和其他预处理器指令一样,以#号作为一行的开 始。ANSI和后来的标准都允许#号前面有空格或制表符,而且还允许在#和 指令的其余部分之间有空格。但是旧版本的C要求指令从一行最左边开始, 而且#和指令其余部分之间不能有空格。指令可以出现在源文件的任何地 方,其定义从指令出现的地方到该文件末尾有效。我们大量使用#define指令来定义明示常量(manifest constan...原创 2020-03-23 23:23:06 · 10518 阅读 · 5 评论 -
C语言如何翻译一个语句
C预处理器在程序执行之前查看程序(故称之为预处理器)。根据程序中的预处理器指令,预处理器把符号缩写替换成其表示的内容。预处理器可 以包含程序所需的其他文件,可以选择让编译器查看哪些代码。预处理器并不知道 C。基本上它的工作是把一些文本转换成另外一些文本。这样描述预处理器无法体现它的真正效用和价值,我们将在本章举例说明。在预处理之前,编译器必须对该程序进行一些翻译处理。首先,编译器 把源代码...原创 2020-03-23 22:41:10 · 2504 阅读 · 0 评论 -
C/C++对齐问题
C11 的对齐特性比用位填充字节更自然,它们还代表了C在处理硬件相关问题上的能力。在这种上下文中,对齐指的是如何安排对象在内存中的位置。例如,为了效率最大化,系统可能要把一个 double 类型的值储存在4 字 节内存地址上,但却允许把char储存在任意地址。大部分程序员都对对齐不 以为然。但是,有些情况又受益于对齐控制。例如,把数据从一个硬件位置 转移到另一个位置,或者调用指令同时操作多个数...原创 2020-03-23 21:57:04 · 1173 阅读 · 0 评论 -
C/C++内存小结
内存用于存储程序中的数据,由存储期、作用域和链接表征。存储期可 以是静态的、自动的或动态分配的。如果是静态存储期,在程序开始执行时 分配内存,并在程序运行时都存在。如果是自动存储期,在程序进入变量定 义所在块时分配变量的内存,在程序离开块时释放内存。如果是动态分配存 储期,在调用malloc()(或相关函数)时分配内存,在调用free()函数时释放 内存。作用域决定程序的哪些部分可以访问某数据。...原创 2020-03-23 18:46:41 · 766 阅读 · 0 评论 -
C/C++ restrict和Atomic关键字
restrict 关键字允许编译器优化某部分代码以更好地支持计算。说到底,就是更好地适应编译器它只能 用于指针,表明该指针是访问数据对象的唯一且初始的方式。要弄明白为什 么这样做有用,先看几个例子。考虑下面的代码:int ar[10];int * restrict restar = (int *) malloc(10 * sizeof(int));int * par = ar;这里,指...原创 2020-03-23 18:43:52 · 1471 阅读 · 0 评论 -
C/C++ volatile类型限定符
volatile 限定符告知计算机,代理(而不是变量所在的程序)可以改变该变量的值。通常,它被用于硬件地址以及在其他程序或同时运行的线程中共享数据。例如,一个地址上可能储存着当前的时钟时间,无论程序做什 么,地址上的值都随时间的变化而改变。或者一个地址用于接受另一台计算 机传入的信息。volatile的语法和const一样:volatile int loc1;/* loc1 是一个易变的位...原创 2020-03-23 18:38:56 · 1070 阅读 · 0 评论 -
C/C++ CONST详解
文章目录核心在指针和形参声明中使用const2.对全局数据使用const核心以const关键字声明的对象,其值不能通过赋值或递增、递减来修改。在ANSI兼容的编译器中,以下代码:const int nochange; /* 限定nochange的值不能被修改 */nochange = 12; /* 不允许 */编译器会报错。但是,可以初始化const变量。因此,下面的代码没问...原创 2020-03-23 15:34:30 · 842 阅读 · 0 评论 -
C/C++投骰子游戏
我们将要模拟一个非常流行的游戏——掷骰子。骰子的形式多种多样, 最普遍的是使用两个6面骰子。在一些冒险游戏中,会使用5种骰子:4面、6 面、8面、12面和20面。聪明的古希腊人证明了只有5种正多面体,它们的所 有面都具有相同的形状和大小。各种不同类型的骰子就是根据这些正多面体 发展而来。也可以做成其他面数的,但是其所有的面不会都相等,因此各个 面朝上的几率就不同。计算机计算不用考虑几何的限制,...原创 2020-03-23 15:02:35 · 3435 阅读 · 3 评论 -
C/C++ 随机数函数
学习了不同存储类别的概念后,我们来看几个相关的程序。首先,来看 一个使用内部链接的静态变量的函数:随机数函数。ANSI C库提供了rand() 函数生成随机数。生成随机数有多种算法,ANSI C允许C实现针对特定机器 使用最佳算法。然而,ANSI C标准还提供了一个可移植的标准算法,在不 同系统中生成相同的随机数。实际上,rand()是“伪随机数生成器”,意思是 可预测生成数字的实际序列。但...原创 2020-03-23 14:57:02 · 1436 阅读 · 0 评论 -
C/C++函数的存储类别
函数也有存储类别,可以是外部函数(默认)或静态函数。C99 新增了 第 3 种类别——内联函数。外部函数可以被其他文件的 函数访问,但是静态函数只能用于其定义所在的文件。假设一个文件中包含 了以下函数原型:double gamma(double); /* 该函数默认为外部函数 */static double beta(int, int);extern double delta(doub...原创 2020-03-23 14:19:50 · 2855 阅读 · 0 评论 -
C/C++内部链接的静态变量、多文件和存储类别说明符
该存储类别的变量具有静态存储期、文件作用域和内部链接。在所有函数外部(这点与外部变量相同),用存储类别说明符static定义的变量具有 这种存储类别:static int svil = 1; // 静态变量,内部链接int main(void){这种变量过去称为外部静态变量(external static variable),但是这个术语有点自相矛盾(这些变量具有内部链接)。但是,没...原创 2020-03-23 12:26:48 · 2088 阅读 · 0 评论 -
C/C++外部链接的静态变量
外部链接的静态变量具有文件作用域、外部链接和静态存储期。该类别有时称为外部存储类别(external storage class),属于该类别的变量称为外 部变量(external variable)。把变量的定义性声明(defining declaration)放 在在所有函数的外面便创建了外部变量。当然,为了指出该函数使用了外部变量,可以在函数中用关键字extern再次声明。如果一个源代码...原创 2020-03-23 12:11:08 · 1860 阅读 · 0 评论 -
C/C++中的寄存器变量
变量通常储存在计算机内存中。如果幸运的话,寄存器变量储存在CPU 的寄存器中,或者概括地说,储存在最快的可用内存中。与普通变量相比, 访问和处理这些变量的速度更快。由于寄存器变量储存在寄存器而非内存中,所以无法获取寄存器变量的地址。绝大多数方面,寄存器变量和自动变量都一样。也就是说,它们都是块作用域、无链接和自动存储期。使用存储 类别说明符register便可声明寄存器变量:int main...原创 2020-03-23 11:36:43 · 2426 阅读 · 0 评论 -
C/C++中的自动变量
属于自动存储类别的变量具有自动存储期、块作用域且无链接。默认情况下,声明在块或函数头中的任何变量都属于自动存储类别。为了更清楚地 表达你的意图(例如,为了表明有意覆盖一个外部变量定义,或者强调不要把该变量改为其他存储类别),可以显式使用关键字auto,如下所示:int main(void){auto int plox;}关键字auto是存储类别说明符(storage-class s...原创 2020-03-23 11:33:58 · 5396 阅读 · 1 评论 -
C/C++的存储期
作用域和链接描述了标识符的可见性。存储期描述了通过这些标识符访问的对象的生存期。C对象有4种存储期:静态存储期、线程存储期、自动存储期、动态分配存储期。如果对象具有静态存储期,那么它在程序的执行期间一直存在。文件作用域变量具有静态存储期。注意,对于文件作用域变量,关键字 static表明了其链接属性,而非存储期。以 static声明的文件作用域变量具有内部链接。但是无论是内部链接还是外部...原创 2020-03-23 11:21:16 · 1948 阅读 · 2 评论 -
C/C++外部链接、内部链接
我们介绍链接。C 变量有 3 种链接属性:外部链接、内部链接 或无链接。具有块作用域、函数作用域或函数原型作用域的变量都是无链接变量。这意味着这些变量属于定义它们的块、函数或原型私有。具有文件作用域的变量可以是外部链接或内部链接。外部链接变量可以在多文件程序中使用,内部链接变量只能在一个翻译单元中使用。注意 正式和非正式术语C 标准用“内部链接的文件作用域”描述仅限于一个翻译单元(即一个...原创 2020-03-23 11:13:06 · 2661 阅读 · 1 评论 -
C/C++的作用域详解
作用域描述程序中可访问标识符的区域。一个C变量的作用域可以是块 作用域、函数作用域、函数原型作用域或文件作用域。到目前为止,本书程 序示例中使用的变量几乎都具有块作用域。块是用一对花括号括起来的代码 区域。例如,整个函数体是一个块,函数中的任意复合语句也是一个块。定 义在块中的变量具有块作用域(block scope),块作用域变量的可见范围是 从定义处到包含该定义的块的末尾。另外,虽然函数的...原创 2020-03-23 11:09:51 · 4362 阅读 · 0 评论 -
C/C++中的存储类别
C提供了多种不同的模型或存储类别(storage class)在内存中储存数 据。要理解这些存储类别,先要复习一些概念和术语。本书目前所有编程示例中使用的数据都储存在内存中。从硬件方面来 看,被储存的每个值都占用一定的物理内存,C 语言把这样的一块内存称为 对象(object)。对象可以储存一个或多个值。一个对象可能并未储存实际 的值,但是它在储存适当的值时一定具有相应的大小(面向对象编程中的对...原创 2020-03-23 11:06:35 · 1237 阅读 · 0 评论 -
C/C++ 中的回调函数
文章目录什么是回调函数为什么要回调函数回调函数格式了解函数指针使用回调函数的现实场景什么是回调函数先看一个标准定义回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。回调方法 ...原创 2020-03-22 15:58:11 · 1119 阅读 · 0 评论 -
近年Cache 缓存的研究论文解读汇总
文章目录这个论文解读系列是什么为什么写这个系列论文详情这个论文解读系列是什么本系列收录了从2004年到2020年关于cache compression 和NVM的有关研究论文并做一个汇总为什么写这个系列最近在研究cache 压缩方面的有关内容,发现目前没有这方面的详细梳理,于是乎自己每两天读一篇论文,做一个合集,供大家参考论文详情FVC解读FPC压缩论文解读FLIP-N-WRIT...原创 2020-03-21 11:33:12 · 2812 阅读 · 1 评论 -
C++类继承
今天写类继承的时候发生了一点小错误,记录下来问题的核心是:用父类指针访问子类元素的方法,调用谁的class baba {public: void test() { printf("baba"); }};class erzi : public baba{public: void test() { baba:: test(); printf("erzi"); }}...原创 2020-03-20 21:00:47 · 793 阅读 · 0 评论 -
Mysql中的语句优化
文章目录写在前面对比开始1. count(1) VS count(*)2. where num is null VS where num = 03. in VS exists4. 关于计数和排序的问题阶段总结一阶段总结二写在前面本文针对Mysql中的各种语句进行对比,给出尽可能真实的语句分析,帮助大家优化自己的sql查询。本文所用测试数据库为官方数据库。在做MySQL数据库测试时苦于没有...原创 2020-03-17 21:58:45 · 948 阅读 · 2 评论 -
算法导论资源汇总
在整理书签的时候发现了原来保存的很多算法导论的资料,方便大家就都贡献出来了。理论篇实践篇微软公司等数据结构+算法面试100题原创 2020-03-16 10:09:39 · 2005 阅读 · 0 评论 -
计算机系统组成与GEM5
本文主要介绍1.计算机内部存储结构是怎么样的2. 用GEM5和NVMain完成研究的策略3. 具体的代码实现考研啥都不知道的人士适合想了解计算机内部结构的人士/想做一些内存研究但是苦于没有教学资源的人士/笔者也是个新手,所以不正确的地方还请多多指教参考的博客和论文博客1:1 0005641( 2014) 05— 0133— 08面向混合内存体系结构的模拟器预备知识懂得...原创 2020-03-09 12:28:36 · 1921 阅读 · 0 评论 -
大学生计算机专业四年应该做的(资源推荐、练习网站、论文写作、考试经验、求职方法、出国计划)
作为一名大学计算机新生,大学本科四年应该怎么度过才能给自己创造一个可能性大一些的未来?初稿更新自2020-3-3一、你要明白的几件事1、大学是自由的,但是要学会自律步入大学后,就不会再有人像高三班主任那样,时时处处管着你。大学是自由的,你可以自行安排你每天的生活。但是很多同学因为自由来得太突然,一下子就收不住自己那颗狂浪的小心脏,一不小心就把学业荒废了。2、多交流多和学长学姐交流,因为...原创 2020-03-03 13:57:05 · 6561 阅读 · 7 评论