jk's Blog

No Start No End


  • 首页

  • 归档

  • 分类

  • 标签

  • 搜索

【C】alignment

发表于 2015-11-28 | 分类于 C | | 2,232 | 9

内存访问粒度

如果没有深入的了解内存方面的东西, 我们可能会认为内存不过是简单的字节数组, 例如下面的形式
程序员怎么看待内存
但是实际上, 计算机的处理器并不是以单个字节块为单位读写内存, 而是以2个,4个,8个,甚至16或者32个字节块为单位读写内存,如下图所示 我们将处理器访问内存单元的大小叫做其内存访问的粒度.
计算机如何看待内存
知道上面这一点很重要, 这也是C语言alignment的基础.

阅读全文 »

【C】记录两个C语言的误区

发表于 2015-11-15 | 分类于 C | | 813 | 3

前言

之前在windows上使用vc++6.0,编写过c的代码,主要是为了完成一些作业,并没有十分深入的学习C语言. 因此当时留下了两个对于c语的言的误区,现在记录一下。

关于函数的调用

一直以我都认为在调用一个方法之前,必须要在前面声明原型或者直接定义该方法, 大概如下面的形式, 否则程序就会出现编译错误。

1
2
3
4
5
6
7
8
9
10
int test();

int main() {
test();
return 0;
}
int test() {
//some code
return 0;
}
阅读全文 »

【应用】信息短时存储

发表于 2015-11-07 | 分类于 应用 | | 3,675 | 19

功能

这是一个在线的应用,用来短时间存储一些信息,以实现在不同设备上共享这些信息的功能。其实目的就是可以将手机上的一些信息快速的复制到电脑上,尤其是在使用Linux系统的时候。下面是该应用的截图。其中阅后即焚是指信息被访问一次之后就会被销毁。

流程

程序主要的流程就是首先在文本框中输入或者粘贴一些内容,然后保存到服务器(使用的是新浪sae),保存成功之后会返回给客户端一个编号,通过该编号就可以访问存储的内容。因为就是为了给手机和电脑之间的复制粘贴提供一个介质,所以信息的有效时间暂时设为了2分钟,2分钟之后就会清除保存的信息。
应用界面

阅读全文 »

【C】Storage Class

发表于 2015-10-26 | 分类于 C | | 2,086 | 8

什么是Storage Class

Storage Class翻译成中文为存储类(总感觉翻译成汉语不太好),用来修饰C中变量和函数。如果没有显式的指定storage class,会使用默认值。它的作用主要以下几点:

  • 决定变量存储的位置。每个变量都需要一定的空间来存储,经常用到的存储单元就是内存,除了内存之外,CPU中的寄存器也可以存储变量,而且一般来说寄存器的访问速度要远远大于内存的访问速度。
  • 决定变量的生命周期。
  • 决定变量的可见级别。
  • 决定变量是否初始化。
    阅读全文 »

【C】变量定义(Definition)与声明(Declaration)

发表于 2015-10-25 | 分类于 C | | 513 | 2

含义

  • 声明(Declaration)*:告诉编译器变量或者函数的信息,例如变量的类型(type)、命名(name)
  • 定义(Definition)*: 为变量或者函数分配存储空间

变量(Variable)

对于局部变量(定义在函数或者代码块中的),声明和定义可以认为是等同的,因为声明变量的同时会为变量分配存储单元,即便在严格意义上认为局部变量的声明和定义是不同的,但是两个过程是不可拆分的,即无法只声明一个局部变量。对于全局变量(定义在函数外)来说,声明和定义是要做区别的,诸如int i, static int i这样的代码,变量的声明和定义是在一起的,即执行完代码之后,变量已经有了对应的存储单元。但是如果加上 extern 修饰符extern int i,此时就仅仅是对变量的声明了,这个过程是不分配存储空间的, extern 会告诉编译器我的定义在其它的地方,你先使用我这个声明,等到编译时再链接到我的定义。

函数(functions)

int a(int i);
上面的只是声明(declare)了一个函数a,该声明描述了函数a的返回值类型(return type),函数命名(name),参数(parameters)的个数以及类型。当我们声明完变量a之后,编译器已经知道了函数a信息,但是并没有为函数分配空间,当我们为函数加上函数体(body)之后,函数才真正的被定义(define),如下,此时函数才有了对应的存储单元,执行该函数会返回1.

1
2
3
int a(int i) {
return 1;
}

在程序中,对同一个函数,可以有多次的声明(没有函数体),但只能有一次的定义(带函数体部分)。需要注意的一点是函数声明默认的存储类(storage class)是 extern 的,但函数的定义并不是。

【HTML5】图片预加载

发表于 2015-06-22 | 分类于 HTML5 | | 343 | 2

在HTML5中,我们可以使用drawImage方法在canvas上进行画图操作,其基本代码如下:

1
2
3
4
5
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
var image = new Image();
image.src = "images/01.jpg";
context.drawImage(image, 0, 0);

不过我们会发现这样写是无法显示出图片的,因为图片并没有加载完全,我们就调用了drawImage方法,我们可以使用img的onload方法,使图片加载完全后
在执行drawImage操作,代码如下

1
2
3
4
5
var image = new Image();
image.src = "images/01.jpg";
image.onload = function() {
context.drawImage(image, 0, 0);
}

或者使用<img>标签先加载图片
<img src="images/01.jpg" style="display: none" id="image">
然后使用getElementById来获得图片对象
var image = document.getElementById('image');

阅读全文 »

1…34
Zhang Jikai

Zhang Jikai

No Start No End

36 日志
13 分类
18 标签
RSS
GitHub
Links
  • Shuai's Blog
  • Xukai
  • Leiquan
© 2015 - 2019 Zhang Jikai
由 Hexo 强力驱动
主题 - NexT.Mist