
c
kevinyu723
这个作者很懒,什么都没留下…
展开
-
数组名和数组名取地址的区别
转自:http://blog.youkuaiyun.com/daniel_ice/article/details/6857019以下代码会打印出什么样的日志呢?[cpp] view plaincopy#include int a[2] = {1,2}; int main(){ printf("a = %p\转载 2015-01-25 14:28:47 · 569 阅读 · 0 评论 -
32位和64位系统中数据类型区别
c语言中基本数据类型的长度:32位下:char :1个字节(不变)*(指针变量): 4个字节(32位机的寻址空间是4个字节。同理64位编译器)(变化)short int : 2个字节(不变)int: 4个字节(不变)unsigned int : 4个字节(不变)float: 4个字节(不变)double: 8个字节(不变)转载 2015-02-10 08:45:02 · 1815 阅读 · 0 评论 -
linux 下gprof 和 oprofile 分析程序性能工具
有些时候,我们特别关注程序的性能,特别是底层软件,比如驱动程序,OS等。为了更好的优化程序性能,我们必须找到性能瓶颈点,“好钢用在刀刃上”才能取 得好的效果,否则可能白做工作。为了找到关键路径,我们可以使用profilng技术,在linux平台上,我们可以使用gprof和oprofile工 具。gprof是GNU工具之一,它在编译的时候在每个函数的出入口加入了profiling的代码,运行转载 2015-02-18 17:12:02 · 949 阅读 · 0 评论 -
临界区,互斥量,信号量,事件的区别
四种进程或线程同步互斥的控制方法1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 2、互斥量:为协调共同对一个共享资源的单独访问而设计的。 3、信号量:为控制一个具有有限数量用户资源而设计。 4、事 件:用来通知线程有一些事件已发生,从而启动后继任务的开始。 临界区(Critical Section)保证在某一转载 2015-02-18 15:34:38 · 483 阅读 · 0 评论 -
一个简单的时间片轮转多道程序内核操作系统工作流程
一.操作系统工作概述存储程序计算机工作模型,计算机系统最最基础性的逻辑结构;函数调用堆栈,高级语言得以运行的基础;中断,多道程序操作系统的基点。二.代码分析在上一篇博文《搭建OS kernel环境方法》的基础上进行时间片轮转多道程序的小os.主要对mypcb.h, mymain.c 和myinterrupt.c这三个文件原创 2015-03-15 17:03:55 · 955 阅读 · 0 评论 -
搭建OS kernel环境方法
It is a platform to write your own OS kernel,its based on Linux Kernel 3.9.4 source code.Set up this platformsudo apt-get install qemu # install QEMUsudo ln -s /usr/bin/qemu-system-i386 /usr转载 2015-03-14 11:20:50 · 1948 阅读 · 0 评论 -
C语言嵌入汇编
概述:linux内核源码中,有很多C语言中嵌入了汇编语句,如何理解这些汇编语句,对理解内核有很重要的作用。 具有输入和输出参数的嵌入式汇编语句的基本格式为: asm("汇编语句" :输出寄存器 :输入寄存器转载 2015-03-12 21:10:48 · 1713 阅读 · 0 评论 -
反汇编代码分析
C代码:int g(int x){ return x + 3;} int f(int x){ return g(x);} int main(void){ return f(8) + 1;}对应的汇编:g:pushl%ebp ;12.esp-4,[esp的指向放入ebp]movl %esp, %ebp ;原创 2015-03-08 13:33:43 · 664 阅读 · 0 评论 -
C语言中 float double在内存中的存储
本文转载于:http://wenku.baidu.com/link?url=ARfMiXVHCwCZJcqfA1gfeVkMOj9RkLlR9fIexbgs9gDdV8rIS48A1_xe1y6YgXnSlpof5pKKJbjScy1StbVdiUWARuAYUIYiyHeTIIhVaz3 C语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,floa转载 2015-04-04 00:28:05 · 947 阅读 · 0 评论 -
数组指针malloc空间问题
int (*p)[10]这是数组指针,指针的类型为(*)[10],即指针指向的类型为10个元素的整形数组。错误:p = (int*) malloc(10*sizeof(int));这里说明p的类型为一个整型 int *。显然类型不匹配!正确:int (*p)[10];p = (int (*)[10]) malloc(10*sizeof(int));扩原创 2015-02-06 19:27:08 · 2016 阅读 · 1 评论 -
尽量使用strncpy,snprintf,少用strcpy,sprintf
strncpy,snprintf函数的好处是指定了要拷贝/存储的空间大小,而strcpy,sprintf并没有指定。后者导致的结果是,如果dest的空间不够大,会出现内存溢出的情况,覆盖原有内存的数据,这种情况在linux内核的开发情况更为明显。因此,多采用strncpy,snprintf函数。原创 2015-02-04 22:16:21 · 721 阅读 · 0 评论 -
memcpy使用注意事项
memcpy函数原型为:void *memcpy(void *dest, const void *src, size_t n)memcpy用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。在c中,很多时候都要用到这个函数,这是一个高效的函数。在使用的时候有几点需要注意:1、如果复制的字节数n超出了dest的空间容量,或者n超出src的容量,这个函数是不会进行原创 2015-02-04 21:54:02 · 7612 阅读 · 0 评论 -
常用时间复杂度排序
耗费的时间从小到大依次是:O(1)原创 2015-01-27 09:04:40 · 852 阅读 · 0 评论 -
Register和volatile区别
原文:http://blog.youkuaiyun.com/edmond999/article/details/8924664register: 在函数内部定义变量时,默认是auto类型,即分配给变量内存。如果定义一个变量用register关键字,那么编译器尽可能把变量存放在CPU内部寄存器中,这样就不必通过内存寻址来访问变量,提高访问效率 volatile:转载 2015-01-27 21:31:42 · 922 阅读 · 0 评论 -
fopen、open和popen区别
open:直接操作物理设备,比如磁盘、设备文件 一般设备/设备文件都通过open来操作 fopen:则通过缓冲区来操作,读写都在缓冲区上 popen:会调用fork()产生子进程,然后从子进程中调用/bin/sh -c来执行参数command的指令 依照popen参数中的type值建立管道连接到子进程的输入/输出设备中,通过返回的指针对子进程 的输入、输出设备进行操作。原创 2015-01-28 10:11:32 · 11075 阅读 · 0 评论 -
递归与迭代的区别
递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己.一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大的减少代码量.递归的能力在于用有限的语句来定义对象的无限集合.使用递归要注意的有两点:1)递归就是在过程或函数里面调用自身;2)在使用递归时,必须有一个明确的递归结束条件转载 2015-01-31 23:34:03 · 702 阅读 · 0 评论 -
日期和时间函数
函数说明asctime()将时间日期以字符串格式表示ctime()将时间日期以字符串格式表示gettimeofday()获取当前时间(由秒和微秒组成)gmtime()获取当前时间和日期localtime()获取当前时间和日期并转换为本地时间mktime()将时间转换成经过的秒数set原创 2015-02-02 10:01:07 · 597 阅读 · 0 评论 -
嵌入式协议栈开发问题【malloc函数实现】
1. malloc函数实现1> 首先定义个全局的数组,并将数据进行分块,大块和小块,目的的解决碎片问题。2> 根据申请的空间大小不同,选取不同的数据块作为内存。3> 定义一个全局标量,用于记录那个块已用,哪个块为空闲。4> 针对申请的每块内存空间,都有独立的结构体记录重要参数:如空间大小,指向的空间指针等。暂时就想到这些,不知道哪位哪位有更好的想法,互相学习讨论。原创 2015-02-03 15:02:26 · 677 阅读 · 0 评论 -
Linux延迟函数
从Linux应用层和内核两方面来区分下延迟函数:1. 应用层 1> sleep usleep 微秒级 头文件为;3> nanosleep 相比标准UNIX 的sleep 调用具有更高高精度的版本。和普通的sleep 调用计算整秒数不同,nanosleep 接受一个指向一个struct timespec 对象的指针作为参数,它可以表示毫微秒(nanoseco原创 2015-02-03 17:47:37 · 969 阅读 · 0 评论 -
linux内核中memcpy和memmove函数的区别和实现
linux内核中memcpy和memmove函数的区别和实现Kernel version:2.6.32CPU architecture:ARMAuthor:ce123(http://blog.youkuaiyun.com/ce123)嵌入式开发交流群:280352802,欢迎您的加入!memcp转载 2015-02-04 21:55:20 · 827 阅读 · 0 评论 -
float与double的范围和精度
float与double的范围和精度1. 范围 float和double的范围是由指数的位数来决定的。 float的指数位有8位,而double的指数位有11位,分布如下: float: 1bit(符号位) 8bits(指数位) 23bits(尾数位) double: 1bit(符号位) 11bits(指数位) 52bits(尾数位) 于是,flo转载 2015-04-04 13:35:25 · 533 阅读 · 0 评论