
杂谈
绘夜
这个作者很懒,什么都没留下…
展开
-
随机数:真随机数和伪随机数
说到随机这个词,相信各位肯定都深有体会了。生活中有太多的不确定因素从各方各面影响着我们,但也正是因为这样我们的人生更加多彩,具有了更多的可能性。可以说,随机是个非常有魅力的东西。而游戏开发者通常也会利用随机让游戏更加的吸引人。例如你正在玩的手机游戏里面的抽卡系统就是很好的例子。笔者曾经在阴阳师的抽符大坑中痛苦不堪。什么,你只玩王者荣耀?那里面的抽英雄抽符文,我想你应该也经历过绝望吧。原创 2017-10-06 23:23:18 · 101624 阅读 · 13 评论 -
C++实现用两个栈模拟一个队列
问题描述用两个栈来实现一个队列,队列的声明如下,实现其中的两个函数,分别完成在队列尾部插入节点和在队列头部删除节点的操作。声明:template <typename T> class CQueue{public: CQueue(void); ~CQueue(void); void appendTail(const T& eleme...原创 2018-09-27 12:48:52 · 1958 阅读 · 0 评论 -
虚拟地址空间布局——基于x86体系32位下Linux系统
我们知道,一个可执行文件运行起来的话它就变成了进程。在x86 32bit Linux下,我们的系统会给每个进程分配一个4G大小的虚拟地址空间。你可能会说,我电脑总共就4g内存这每个进程都给4g怎么可能啊。注意虚拟两个字。那么这块空间里都装了什么东西呢?其中前3G内存是用户空间,最后1G是内核空间。所有的进程有各自的用户空间,但所有的进程都共享一个内核空间。不要着急,我们从上到下挨个来...原创 2018-07-23 21:29:20 · 2151 阅读 · 0 评论 -
函数调用:栈帧的开辟与回退
一份源文件是由数据和指令组成的,函数通常作为指令和数据的集合被人们创造出来实现各种功能。就是这个我们天天在调用着的函数,你有没有想过:1.我们在调用它的时候系统做了什么?2.main函数中如果还有另一个函数,在跳转后运行完这个函数时,编译器怎么知道下一行执行哪个语句呢?会不会又从头执行了?3.函数在结束之后(运行到反花括号“}”处),系统又是怎么处理的?4.不同的语言对函数形参内存...原创 2018-07-25 23:57:54 · 1752 阅读 · 3 评论 -
大端存储和小端存储及基于c语言的测试函数
1原创 2018-07-15 23:14:48 · 1101 阅读 · 0 评论 -
编译和链接详解
在我们将源代码打好以后,检查无错,点下“编译并执行”按钮。控制台输出一行又一行,程序随即正常的运行起来。这是编码的日常。 那么你有没有想过,在这份代码变成一个可以跑起来的程序的过程中,它都经历了什么呢?有人说简单啊,不就是先编译再链接么。本文就详细的对编译链接的过程进行分析,里面或许真的有你不知道的东西呢。 我们先大体地概括一下:假设我们现在辛辛苦苦写好了一份代码,它的文件名叫做...原创 2018-07-24 10:22:42 · 5383 阅读 · 0 评论 -
内存对齐&结构体大小的计算
在我的博客《C语言的预处理详解》中最后一段,讲到了#pragma预处理符,其中有一个参数的使用就是#pragma pack(n)。这个参数的意义就是告诉编译器,令编译器按照n个字节进行对齐。什么又是对齐呢?为什么会有这个东西呢?听我细细道来。什么是内存对齐?先看下面的结构体。struct TestStruct1{ char c1; short s; ...原创 2018-07-18 23:03:34 · 3190 阅读 · 3 评论 -
C语言的预处理详解
说到预处理,大家绝对不会觉得陌生。因为我们在开始编写一份程序的时候,从键盘录入的第一句话:#include <stdio.h>这里就使用了预处理,引入头文件。同时在文件开头我们常见的#define ,#ifdef,#pragma之类的都属于预处理。 那么,我们在此先提出几个问题:1.预处理是C语言的一部分吗?2.包含#号的都是预处理吗?3.预处理指令后面是不...原创 2018-07-18 00:45:50 · 34332 阅读 · 7 评论