本站首页    管理页面    写新日志    退出                                          --==~欢迎光临FoxWolf的Blog~==--   



 日志搜索


«November 2025»
1
2345678
9101112131415
16171819202122
23242526272829
30


公告


我的分类

日志更新

最新评论

留言板

链接

 


Blog信息
blog名称:FoxWolf
日志总数:127
评论数量:246
留言数量:0
访问次数:858878
建立时间:2006年5月31日




[必须掌握]C语言之extern声明辨析
文章收藏,  软件技术,  电脑与网络

FoxWolf 发表于 2007/11/8 15:05:43

1 基本解释
  extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。
  另外,extern也可用来进行链接指定。 2 问题:extern 变量

  在一个源文件里定义了一个数组:

char a[6];
  在另外一个文件里用下列语句进行了声明:

extern char *a;
  请问,


阅读全文(3402) | 回复(0) | 编辑 | 精华 | 删除
 


[必须掌握]Linux Programming by Example:The Fundamentals(Notes One)
文章收藏,  软件技术,  电脑与网络

FoxWolf 发表于 2007/11/7 14:21:57

3.1  Linux/Unix 地址空间 众所周知,操作系统把一个可执行的程序载入内存中,这个可执行程序可称为一个进程。操作系统为程序访问命令行和环境变量做好准备,将程序开启运行。分配进程的内存可分为以下五个区域: ①代码段 (文本段-text segment) 可执行指令放在这个区域。如果可能,Linux/Unix会安排好相同程序的多个运行实体共享这些实例代码。任何内存只有一份相同程序的指令拷贝。可执行文件中包含文本段的部分叫文本结点(text section)。 ②数据段 (data segment) 初始化为非零值的静态分配数据和全局数据存放在数据段中。运行相同程序的每个进程都有自己的数据段。可执行文件中包含数据段的部分是数据结点(data section)。 ③BSS 段(Block Started by Symbol) 缺省初始化为零的全局数据和静态分配的数据存放在进程的BSS区域。每个运行相同程序的进程都有自己的BSS区域。当程序运行的时候,把


阅读全文(1946) | 回复(0) | 编辑 | 精华 | 删除
 


[必须掌握]浅谈C中的malloc和free
文章收藏,  软件技术,  电脑与网络

FoxWolf 发表于 2007/11/6 20:56:03

在C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C中的malloc()和free()两个函数的了解甚少,只知道大概该怎么用——就是malloc然后free就一切OK了。当然现在对这两个函数的体会也不见得多,不过对于本文章第三部分的内容倒是有了转折性的认识,所以 写下这篇文章作为一个对知识的总结。这篇文章之所以命名中有个“浅谈”的字眼,也就是这个意思了!希望对大家有一点帮助!      如果不扯得太远的话(比如说
阅读全文(2728) | 回复(0) | 编辑 | 精华 | 删除
 


[必须掌握]进程在内存中的影像
文章收藏,  软件技术,  电脑与网络

FoxWolf 发表于 2007/11/5 16:49:26

进程在内存中的影像. 

      我们假设现在有一个程序, 它的函数调用顺序如下. 

      main(...) ->; func_1(...) ->; func_2(...) ->; func_3(...) 

      即: 主函数main调用函数func_1; 函数func_1调用函数func_2; 函数func_2调用函数func_3 



      当程序被操作系统调入内存运行, 其相对应的进程在内存中的影像如下图所示. 



  &nbs

阅读全文(2847) | 回复(0) | 编辑 | 精华 | 删除
 


[必须掌握]C语言高效编程的四大绝招
文章收藏,  软件技术,  电脑与网络

FoxWolf 发表于 2007/11/5 10:42:14

编写高效简洁的C语言代码,是许多软件工程师追求的目标。本文就是针对编程工作中的一些体会和经验做相关的阐述。

第一招:以空间换时间

计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决问题的第1招--以空间换时间。比如说字符串的赋值:

方法A:通常的办法
#define LEN 32
char string1 [LEN];
memset (string1,0,LEN);
strcpy (string1,"This is a example!!");


方法B:
const char string2[LEN] ="This is a example!";
char * cp;
cp = string2 ;


使用的时候可以直接用指针来操作。

从上面的例子可以看出,A和B的效率是不能比的。在同样的存储空间下,B直接使用指针就可以操作了,而A需要调用两个字符函数才能完成。B的缺点在于灵活性没有A好。在需要

阅读全文(1293) | 回复(0) | 编辑 | 精华 | 删除
 


[必须掌握]#define offsetof(STRUCTURE,FIELD) ((int)((char*)&((STRUCTURE*)0)->FIELD))
文章收藏,  软件技术,  电脑与网络

FoxWolf 发表于 2007/11/5 10:40:55

#define offsetof(STRUCTURE,FIELD) ((int)((char*)&((STRUCTURE*)0)->FIELD)) 上述宏是什么意思? 计算 STRUCTURE 类型中 FIELD 域的偏移量 下面拿KEIL 8051的定义来作点解释:
((s *)0):强制转化成数据结构指针,并使其指向地址0;
((s *)0)->m:使该指针指向成员m
&(((s *)0)->m):获取该成员m的地址
(size_t)&(((s *)0)->m):转化这个地址为合适的类型
你可能会迷惑,这样强制转换后的结构指针怎么可以用来访问结构体字段?呵呵,其实这个表达式根本没有也不打算访问m字段。ANSI C标准允许任何值为0的常量被强制转换成任何一种类型的指针,并且转换结果是一个NULL指针,因此((s*)0)的结果就是一个类型为s*的NULL指针。如果利用这个NULL指针来访问s的成员当然是非法的,但&(((s*)0)->m)

阅读全文(1531) | 回复(0) | 编辑 | 精华 | 删除
 


[必须掌握]BSS段 数据段 代码段 堆栈
文章收藏,  软件技术

FoxWolf 发表于 2007/11/5 10:37:30

BSS段 数据段 代码段 堆栈
声明:大部分来自于维基百科,自由的百科全书。 BSS段:在采用段式内存管理的架构中,BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。 数据段:在采用段式内存管理的架构中,数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。 代码段:在采用段式内存管理的架构中,代码段(code segment / text segment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许自修改程序。 在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。
堆栈又称堆栈(stack)在计算机科学中,是一种特殊的链表形式的数据结构,它的特殊之处在于只能允许在链表的一端(称为栈顶,英文为top)

阅读全文(2188) | 回复(0) | 编辑 | 精华 | 删除
 


[必须掌握]zz可重入函数与不可重入函数
文章收藏,  网上资源,  软件技术

FoxWolf 发表于 2007/11/2 15:29:07

转载自http://blog.chinaunix.net/u/25994/showart_369466.html

阅读全文(1543) | 回复(1) | 编辑 | 精华 | 删除
 


[必须掌握]static的作用
文章收藏,  网上资源,  软件技术,  电脑与网络

FoxWolf 发表于 2007/10/6 13:47:11

在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。下面是a.c的内容
阅读全文(2080) | 回复(0) | 编辑 | 精华 | 删除
 


[必须掌握]朴素的模式匹配和改进的模式匹配(KMP)算法
网上资源,  软件技术

FoxWolf 发表于 2007/7/25 0:48:40

朴素的模式匹配和改进的模式匹配(KMP)算法说明
   LEWISLAU
前言:最近复习数据结构,以前老师讲的时候居然忽略了串。汗,我们学校的确牛B。某仁兄告诉我,KMP基本是数据结构里面难度比较大的算法了,所以掌握了它,至少从心理上给我了很大的鼓舞,但是这个算法是我询问老师才掌握的,呵呵。言规正传,开始说KMP算法。
在说改进的模式匹配(KMP)算法之前我们先说朴素的模式匹配:
其实很简单,就是两个字符串逐位比较。在模式匹配中:我们假定字符串P在字符串T中查找是否有匹配的。此时,称P为模式(Pattern)字符串,称T为目标(Target)字符串。
OK,我一般比较喜欢以实例说明问题。
T:        a  b  d  a  b  d  a  b  c
P:        a  b&n

阅读全文(3299) | 回复(1) | 编辑 | 精华 | 删除
 


« 1 2 3 »



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.063 second(s), page refreshed 144801918 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号