
C语言
靖源
这个作者很懒,什么都没留下…
展开
-
c语言中关键字volatile
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序:short flag;vo转载 2012-10-24 11:14:27 · 986 阅读 · 0 评论 -
rtems中对于一些预编译宏的使用:SCORE_EXTERN
/** * The following ensures that all data is declared in the space * of the initialization routine for either the Initialization Manager * or the initialization file for the appropriate API. It原创 2014-12-09 11:39:07 · 1134 阅读 · 0 评论 -
glibc对malloc的实现
glibc对malloc的实现 目前最新版本为2.18,glibc源码目录/glibc-2.18/malloc中可以看到。在glibc的malloc的实现中, 分配虚存有两种系统调用可用: brk()和mmap(), 如果要分配大块内存, glibc会使用mmap()去分配内存,这种内存靠近栈。基于UNIX 的系统有两个可映射到附加内存中的基本系统调用: brk原创 2014-01-10 21:57:01 · 1858 阅读 · 0 评论 -
如何让jiffies 占用 jiffies_64 的低32位
转载自:http://www.groad.net/bbs/thread-3352-1-1.html在 Linux 内核中,jiffies 用于记录系统自启动到当前时刻系统时钟所产生的滴答数。 每一秒系统时钟的中断次数等于 HZ 的值,比如一般的 PC 中 PC 的值定义为 1000,也就是说,一秒钟内系统要收到 1000 次的时钟中断;同样,jiffies 的值在一秒钟内增转载 2013-11-26 22:33:59 · 1079 阅读 · 0 评论 -
为什么数组从0开始
今天看到一篇文章,《Python语言的创始人解释为什么Python数组的索引从0开始》http://www.aqee.net/why-python-uses-0-based-indexing/.他给的理由是:"使用0-based的索引方式,Python的半开区间切片和缺省匹配区间切片语法变得非常漂亮:a[:n] 和 a[i:i+n],前者的标准写法就是a[0:n]。"a[:n]原创 2013-11-02 15:02:53 · 1225 阅读 · 0 评论 -
Linux 函数调用栈的使用
结论:1.esp指向栈顶存有数据的那个单元(而不是下一个单元)2.在函数中临时变量是存在栈顶和栈底之间的,包括参数在内。通常我们说通过栈传递参数,参数入栈的操作并不是push,而是movl 参数 0xXX(%esp)。3.call函数时。返回地址保存到栈顶。是使用push指令的,会修改esp的值(-4)4.在被调用函数的开头push ebp。保存原来栈底,也要修改esp原创 2013-10-18 18:28:25 · 1092 阅读 · 0 评论 -
c语言中include "" 与 <>的区别
""首先在当前目录下寻找,如果找不到,再到系统目录中寻找如果是自己定义的头文件,且放在当前目录下,应使用""。原创 2013-09-26 21:43:34 · 962 阅读 · 0 评论 -
Linux 编程的tricky 一:宏定义中的do-while(0)
1.使用do-while(0):为了能够在条件语句中使用复杂的宏定义。#include #include #define FOO(x) \printf("x=%d\n",x); \x++;#define FOO2(x) \do{ \ printf("x=%d\n",x); \ x++; \}while(0)原创 2013-05-11 10:46:08 · 1130 阅读 · 0 评论 -
指向同一个null的两个指针,赋值后不同.
学过指针后,总记得指向同一个地址的两个指针,如果对其指向的内容进行操作是等价的.但是如果是指向的NULL,那么对其内容进行操作的结果是不一样的。因为它们并没有指向一片公共的地址。Lnode *pre,*cur;pre = L;//L是链表的头指针cur = pre->next;方法一:if(cur==NULL){ cur=s;//s是一个带插入的节点}方法二:if(原创 2013-03-26 09:57:14 · 1583 阅读 · 0 评论 -
函数调用中栈帧内容
转载:http://www.cnblogs.com/taek/archive/2012/02/05/2338877.html当发生函数调用的时候,栈空间中存放的数据是这样的:1、调用者函数把被调函数所需要的参数按照与被调函数的形参顺序相反的顺序压入栈中,即:从右向左依次把被调函数所需要的参数压入栈;2、调用者函数使用call指令调用被调函数,并把call指令的下一条指令的地址当转载 2012-12-29 21:42:48 · 853 阅读 · 0 评论 -
Linux内核数据类型long long
typedef long long __kernel_loff_t;在code::block中测试了一个。sizeof(long) = 4;sizeof(long long) =8;同时不存在int ,short等类型的这种形式。编译不能通过。原创 2012-11-23 20:13:18 · 2227 阅读 · 0 评论 -
关于对齐
对齐多用于内存管理中,为了使得CPU的存取速度更快。给定一个对齐因子,所有的地址都以该对齐因子为基准对齐。即:地址为该对齐因子的整数倍。在rtems中,有如下代码:RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_up( uintptr_t value, uintptr_t alignment){ uintptr_t remainder原创 2014-12-15 10:22:53 · 1145 阅读 · 0 评论