摘要: 其实题目有些哗众取宠,主要想表达的是对chunk_alloc函数中两个地方存在疑问,想问问诸位怎么理解这两处的。下面先给出chunk_alloc代码实现,同时大概说明一下函数的功能以及每一处代码的作用。SGI的内存配置器分成两层:第一层直接调用malloc,第二层是自己做了一个内存池来分配。下面说下第二层配置器的思路:第二层配置器首先设置了一个free_list[16]的数组,数组中是指针,分别指向一块内存,指针类型定义如下:union obj { union obj *free_list_link; char client_data[1];};总之,free_list每个下标链接的内... 阅读全文
posted @ 2013-09-29 23:25 ziyoudefeng 阅读(1113) 评论(1) 推荐(0) 编辑
摘要: 众所周知,面向对象三大思想:封装,继承,多态。 但面向对象到底是怎么产生的,产生他的原因是什么呢?且听我慢慢道来~ 很久以前,软件开发的世界还是一片浑浑噩噩,不管开发什么软件都面临着复杂性这个问题,代码里面到处是goto语句,程序的流程随意跳转。众生写代码时,越写到后面越不知道自己写的是什么。这时候出现一位巨人,他就是结构化编程。 结构化编程的基本思想是:有序地控制流程,即把程序的执行顺序限制为顺序、分支和循环这三种;把共通的处理归结为例程(函数)。好处是: 三大限制:大大降低了程序的自由度,减少了各种组合,使得程序不至于太过复杂。疑问:如果由于降低程序的自由度导致程序的实现能... 阅读全文
posted @ 2013-04-09 17:02 ziyoudefeng 阅读(1882) 评论(7) 推荐(2) 编辑
摘要: 1 问题描述 在此之前,我对C中函数调用过程中栈的变化,仅限于了解有好几种参数的入栈顺序,其中的按照形参逆序入栈是比较常见的,也仅限于了解到这个程度,但到底在一个函数A里面,调用另一个函数B的过程中,函数A的栈是怎么变化的,实参是怎么传给函数B的,函数B又是怎么给函数A返回值的,这些问题都不能很明白的一步一步解释出来。下面,便是用一个小例子来解释这个过程,主要回答的问题是如下几个: 1、函数A在执行到调用函数B的语句之前,栈的结构是什么样子? 2、函数A执行调用函数B这一条语句的过程中,A的栈是怎样的? 3、在执行调用函数B语句时,实参是调用函数A来传入栈,还是被调函数B来进行入栈? ... 阅读全文
posted @ 2012-11-23 23:22 ziyoudefeng 阅读(11079) 评论(0) 推荐(2) 编辑
摘要: 题目摘自CareerCup-Top 150 Questions 4th描述如下:Write a method to decide if two strings are anagrams or not解答如下:分析:两个字符串是否相同,解法1就是把这两个字符串一排序,然后看是否==解法2是分析两个字符串都含有多少个不同的字符,每个不同的字符含有几个,比如说字符串"abcdefab"含有6个不同字符,分别是a b c d e f,其中各个字符的个数分别是2 2 1 1 1 1 ,那么解法2就可以比较两个字符串这个个数是否相等。代码如下说明:letters数组里面存放各个字符的个 阅读全文
posted @ 2012-09-27 22:36 ziyoudefeng 阅读(3246) 评论(0) 推荐(0) 编辑
摘要: 1 /* 2 * stdarg.h 3 * 4 * Provides facilities for stepping through a list of function arguments of 5 * an unknown number and type. 6 * 7 * NOTE: Gcc should provide stdarg.h, and I believe their version will work 8 * with crtdll. If necessary I think you can replace this with th... 阅读全文
posted @ 2012-09-17 17:41 ziyoudefeng 阅读(3284) 评论(0) 推荐(0) 编辑
摘要: 可变参数函数主要是利用了三个宏,va_start, va_arg, va_end和一个类型va_list。先写个小例子,然后再说明这三个宏的含义。例:计算指定数量的值的平均值 1 #include <stdarg.h> 2 3 float 4 average(int n_val, ...) 5 { 6 va_list arg; // 等价于char *arg; 7 int count; 8 float sum = 0; 9 10 va_start(arg, n_val); // arg = &n_val + 4 (假设这里int长度是4个字节)11 ... 阅读全文
posted @ 2012-09-17 17:38 ziyoudefeng 阅读(904) 评论(5) 推荐(0) 编辑
摘要: 1 #include <iostream> 2 3 using namespace std; 4 int toInteger(char string[]); 5 int main(){ 6 char string[100]={0}; 7 cin>>string; 8 cout<<toInteger(string)<<endl; 9 return 0;10 }11 12 int toInteger(char string[])13 {14 //Your code is here15 int ret = 0;16 bool flag = ... 阅读全文
posted @ 2012-09-15 12:57 ziyoudefeng 阅读(292) 评论(0) 推荐(0) 编辑
摘要: 题目描述: 题目要求是:unsigned int reverse_bits(unsigned int value);这个函数的返回值是把value的二进制位模式从左到右变换一下后的值。例如,在32位机器上,25这个值包含下列各个位: 00000000 00000000 00000000 00011001函数的返回值应该是2 550 136 832,它的二进制位模式是: 10011000 00000000 00000000 00000000要求是:不能让函数依赖于机器上整型数值的长度。答案代码以及解释: 题目看上去是比较简单的,不知道大家是怎么想的。下意识的第一想是从这个value的最右... 阅读全文
posted @ 2012-09-14 16:10 ziyoudefeng 阅读(4878) 评论(2) 推荐(0) 编辑
摘要: 今天在C和指针P63看到了这个计算公式,ai+1= ( ai + number/ai) / 2。之前也有在网上看到过,不过出处忘了,记得好像是关于组合数学还是数论里面的一个内容。公式很简单,理论这个我就不懂了,还希望各位给指导一下。下面贴出自己的代码,作为记忆保留。 1 float my_sqrt(float number) { 2 float new_guess; 3 float last_guess; 4 5 if (number < 0) { 6 printf("Cannot compute the square root of a ne... 阅读全文
posted @ 2012-09-13 11:24 ziyoudefeng 阅读(3195) 评论(2) 推荐(0) 编辑
摘要: 两个问题:1、下面两个函数my_array_func和my_pointer_func第一个输出结果是否一样?(P6和P17)2、每个函数的第一个输出和第二个输出结果是否一样?(P6与P7,,,P17与P18)能猜对的,估计也都理解C里面数组和指针的区别于联系。感觉自己不是很理解的,建议看C专家编程P84的图。代码如下: 1 char ga[] = "abcdefghijklm"; 2 3 void 4 my_array_func(char ca[10]) 5 { 6 printf("addr of array param = %#x\n", &c 阅读全文
posted @ 2012-08-17 20:23 ziyoudefeng 阅读(449) 评论(0) 推荐(0) 编辑