还是展望一下未来
好歹大了一岁了, 具体目标还是要有
希望22岁这一年继续好好学习, 读万卷书, 行万里路
同时警惕被物质化, 不能随波逐流, 不忘这一切的初衷
细化目标:
1. 继续坚持长跑和学习英语
2. 加强算法的学习, 有空多上OJ刷题, 强化编码功底和算法能[……]
一. 轮询
试想这样一种情形, 一个主线程中创建两个(多个)工作线程, 主线程需要等待一个或者多个工作线程执行结束.
比较直接的做法就是主线程中用一个循环, 每次都锁住和工作线程相同的一个互斥锁并检查是否有工作线程已经结束.
#include <stdio.h> #inc[......]
前几天和一朋友聊到手机解锁, 朋友问我有没有想过手机pattern lock有多少种组合方式. 其实这个问题早就想过了, 以前感觉会有很多种特殊情况, 用程序解还不如用排列组合来得快
后来讨论了下, 就决定把问题简化: 只考虑4个点或4个点以上的情形, 并且包含下图这种路径的不算有效的组合方式
[……]
#include <stdlib.h> #include <string.h> #define between(x, min, max) ((x) >= (min) && (x) <= (max)) static inline unsigned[......]
#include <stdlib.h> #include <string.h> unsigned int base64_encode( unsigned char **dest, const unsigned char *src, unsigned int le[......]
背景: sleep函数会将进程投入睡眠, 直到被时钟中断唤醒. 而”睡眠”这个状态含义是进程不在CPU上运行, 并不是 CPU 投入”睡眠”, 当时钟中断到来时经过进程调度重新将 CPU 让给之前睡眠的进程
那么问题就来了, 如果一个系统中每个进程都主动或者被动进入睡眠状态, 比如10个进程都[……]
转自http://just-study.blogbus.com/logs/37238127.html 代码有部分改动
本文档已经经过反复修改,最终包含大量的方法帮助优化c语言代码。编译器是很好的,但是它们并不能按照你的意愿做所有事情,因此,我希望帮助大家从自己的代码中获取最好的性能比。本教[……]
曾经一直好奇c编译器如何做的类型转换, 最近研究了几天, 有了个大概的了解, 这里做个总结:
整型间的转换比较简单, 如果字长变化, 只需进行扩展或者截断
这方面gcc和msvc编译器做法大同小异, 就不分开讨论了, 就以gcc为例
比如int8到int32的扩展,[……]
前段时间看了下glibc的一些string库函数实现
自己照猫画虎的写了几个函数测了测, 比起windows vc中自带的实现, 并没有更快, 反倒是慢了很多.
比如memset函数, 微软公开的vc crt中memset.c是以字节为单位循环的. 如果用glibc中操作块与循环展开[……]
近来打算阅读glibc源码, 便从最简单的string.h开始. 说道string库, 第一个想到的是什么函数? 当然是strlen
于是翻开strlen.c , 大牛写的代码就是不一样, 总像是故意把原本简单的东西写得复杂, 仔细阅读才发现简直是神作.
对任何c程序员来说以下代码可以说是信手拈[……]
转一个条理比较清晰的文章 Intel x86 Function-call Conventions – Assembly View[……]
这个问题一开始源于用vc编译一个utf8文件, 遇到了错误error C2001: 常量中有换行符
原本是个mingw下写的程序, gcc编译时没问题的, 后来网上搜了下, 说是因为vc对无bom的utf8文件支持不太好, 得加上bom才能正常编译
在vc上面测试以下代码
#include <[......]
我们可以定义一些最基本的计算,比如加减乘除、移位等,然后通过对基本计算进行高阶组合,形成更复杂的计算,比如幂、开方、阶乘等等
而计算机中除了基本的计算,还有基本的控制指令,比如循环、判断、递归、函数调用等
当具备这些特性后,我们就可以用他们进行组合,模拟出一个高阶的机器
比如我们可[……]