在steam上买了 BattleBlock Theater, 官方说支持linux,但是却无法启动。
在steam里启动看不到log,于是找到游戏的安装目录。
/home/coder/.steam/steam/steamapps/common/BattleBlock Theater
在终端下启动,报错:
阅读更多CSAPP第二章的内容以前组成原理基本都学过...所以就简单翻了翻。
对应的lab是用位运算实现各种有的没的...
题目基本都很tricky...
除了用到一些常规的位运算性质,还用到了一些奇怪的条件:
阅读更多系统版本为Manjaro 18.0.3 Illyria
运行文明5比较容易,只需要设置启动选项为:
LD_PRELOAD=/usr/lib32/libopenal.so.1 %command%
文明6运行会报错 undefined symbol: FT_Done_MM_Var
解决办法是 在终端中用如下办法运行steam:
LD_PRELOAD=/usr/lib/libfreetype.so steam
阅读更多**Halide is a programming language designed to make it easier to write high-performance image and array processing code on modern machines. **
halide有两个特性比较吸引人。一个是对于各种平台架构的支持。
* CPU architectures: X86, ARM, MIPS, Hexagon, PowerPC * Operating systems: Linux, Windows, macOS, Android, iOS, Qualcomm QuRT * GPU …
阅读更多2019年2月24:完成了除了"Challenge"以外的全部练习和问题. 总共花费15个小时.
2019年2月26:完成"Challenge 2"(应该是最简单的一个orz,只花了不到一个小时)
Part 1: Physical Page Management
操作系统必须时刻追踪哪些物理内存在使用,哪些物理内存没有在使用。
阅读更多说起C语言的变长参数,可能听起来比较陌生,因为很少会需要自己实现。不过想一下scanf和printf,参数个数的确是不固定的。
stdarg.h 中提供以一套机制来实现变长参数。以及,要说明的是,变长参数不是什么黑魔法,原理依赖于stack frame的结构,具体可以参考x86-calling-conventions 简单来说,由于函数参数入栈的顺序是固定的,**因此一旦我们知道某函数帧的栈上的一个固定参数的位置,我们完全有可能推导出其他变长参数的位置 **
阅读更多x86的调用约定主要说的是这几件事:
* The order in which atomic (scalar) parameters, or individual parts of a complex parameter, are allocated * How parameters are passed (pushed on the stack, placed in registers, or a mix of both) * Which registers the called function must preserve for the caller (also known as: callee-saved …
阅读更多