![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程基础
文章平均质量分 66
qk369369
搜索
展开
-
C程序中的内存结构
一个由C/C++编译的程序占用的内存分为以下几个部分摘取自网上资料1、栈区(stack) 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局/静态存储区转载 2012-11-03 19:36:25 · 399 阅读 · 0 评论 -
可重入与线程安全
可重入与线程安全(整理自网上资料)线程安全函数:概念: 线程安全的概念比较直观。一般说来,一个函数被称为线程安全的,当且仅当被多个并发线程反复调用时, 它会一直产生正确的结果。确保线程安全: 要确保函数线程安全,主要需要考虑的是线程之间的共享变量。属于同一进程的不同线程会共享进程内存空 间中的全局区和堆,而私有的线程空间则主要包括栈和寄存器。因此,对于同一进程的不同线程来说转载 2013-06-16 18:11:12 · 571 阅读 · 0 评论 -
进程与线程
线程也被称作是轻量级进程(LWP),是调度和分派的基本单位,而进程是拥有资源的基本单位。子进程和父进程拥有不同的代码和数据空间,而同一进程创建出的多个线程共享代码和数据空间,只是有各自的堆栈和程序计数器。由于线程共享代码和数据空间,所以其切换、创建等所用到的开销要远远小于进程,并且因为同一进程的线程由于共享同一地址空间,同步和通信业变得更加容易。一个标准的线程由线程ID、当前指令指针(PC)、原创 2013-06-14 20:33:32 · 516 阅读 · 0 评论 -
编程小技巧
代码中常用的宏:#define MIN(a, b)(((a)#define MAX(a, b)(((a)>(b))?(a):(b))#define ROUNDUP(x,y) ((((ulong)(x)+((y)-1))/(y))*(y))#define ISALIGNED(a,x) (((ui原创 2013-05-29 16:26:22 · 748 阅读 · 0 评论 -
也谈大小端
大小端问题是一个很简单的概念,但在实际使用中却是一个所必须考虑的非常重要的细节。虽然简单却也曾经困扰过我很多次,今天正好有空整理出来做个笔记。 字节序的大小端通常指的是在一个字内(32位或者64位)各字节在内存中的存放顺序。注意这里仅是一个字内Byte的顺序,各个字之间的顺序不受大小端的影响。另外还要注意想一个int数据进行左右移位是跟大小端没关系的,因为编译器已经屏蔽了这层差异,不原创 2013-03-17 15:50:53 · 749 阅读 · 0 评论 -
位域与大小端
C中的位域与大小端问题(整理自网上资料)字节内也是有大小端问题,与字节中的大小端类似:1)little endian中的位应该这样排列: 01234567 即排在前面的是低位。因此,先分配least significant bits 2)而在Big endian中,位应该这样排列: 76543210 即排在前面的是高位。因此,先分配most significan转载 2013-05-29 10:48:31 · 18380 阅读 · 6 评论 -
位域的使用
有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态,用一位二进位即可。为了节省存储空间,并使处理简便,C语言提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个类型单元中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以达到压缩数据的目的。位域定义转载 2013-05-29 14:10:23 · 896 阅读 · 0 评论 -
地址空间
最近搞驱动开发,接触到了地址空间这个概念。这个题目比较大,慢慢整理。CPU地址空间I/O地址空间I/O作为CPU和外设交流的一个渠道,主要分为两种,一种是Port I/O,一种是MMIO(Memory mapping I/O)。前者就是我们常说的I/O端口,它实际上的应该被称为I/O地址空间。对于x86架构来说,通过IN/OUT指令访问。PC架构一共有6原创 2013-03-19 10:37:56 · 698 阅读 · 0 评论 -
semaphore与Mutex
semaphore与Mutex(转)C# Semaphore Classhttp://msdn.microsoft.com/en-us/library/system.threading.semaphore.aspxwikiSemaphore (programming)http://en.wikipedia.org/wiki/Semaphore_%28programming%转载 2013-01-28 11:26:41 · 726 阅读 · 0 评论 -
'\0'的ASCII是0
今天帮同事调程序,进行一串码流的移位操作,循环体没执行一定的个数就跳出了。调了半天,后来发现是循环条件有问题。该老兄用的是字符串的结尾判断,“ '\0' != * p" 导致遇0结束。告知后,该兄竟不知' \0'的ASCII是0!!!!原创 2013-02-18 17:22:37 · 5340 阅读 · 0 评论 -
C结构体中赋值使用的冒号和点号
今天在看broadcom交换芯片SDK的时候,偶然发现,结构体的赋值竟然是用了冒号!一番搜索之后,原来是这个样子。原文地址:http://blog.csdn.net/unbutun/article/details/4648307结构体:struct usb_driver { const char *name; int (*probe) (struct usb转载 2013-01-05 19:38:40 · 3238 阅读 · 0 评论 -
C语言中的宏定义 #define
整理自网上资料宏展开的时机:C语言中如何使用宏C(和C++)中的宏(Macro)属于编译器预处理的范畴,属于编译期概念(而非运行期概念):其中预处理器产生编译器的输入,它实现以下的功能: (1) 文件包含 可以把源程序中的#include 扩展为文件正文,即把包含的.h文件找到并展开到#include 所在处。 (2) 条件编译 预处理器根据#if和#i转载 2012-11-10 16:55:49 · 1028 阅读 · 0 评论 -
GCC的编译流程
mark一下,稍后整理。转载 2012-12-11 19:32:36 · 388 阅读 · 0 评论 -
C语言头文件
整理于网上资料 http://blog.csdn.net/janders/article/details/611081 和 http://www.cnblogs.com/polestar/archive/2012/02/24/2366724.html头文件的理论概述:.h中一般放的是同名.c文件中定义的变量、数组、函数的声明,需要让.c外部使用的声明。1)h文件转载 2012-11-03 20:48:15 · 711 阅读 · 0 评论 -
系统栈原理
http://zhongcong386.blog.163.com/blog/static/134727804201110774335161/?suggestedreading&wumii转载 2012-11-07 21:03:52 · 380 阅读 · 0 评论 -
C指针的用法小结
在人人网上看到了一篇C指针的总结,讲一些基本概念,写的不错,原地址:http://blog.renren.com/blog/226041764/873143492char *p, **p, ***p;char p[],p[][],p[][][];char *p[],*p[][],**p[],**p[][],*(*p)[],(**p)[],(**p)[][];转载 2012-11-03 16:21:59 · 371 阅读 · 0 评论 -
回调函数与简单的例子
摘自:1、 http://blog.sina.com.cn/s/blog_5061633601009lmb.html 2、 http://blog.csdn.net/p_w_m/article/details/7184332回调函数: 回调函数是用户由用户实现的、注册到低层API当中的、当满足一定条件时会触发该回调函数按照用户的意图运行转载 2012-11-03 16:07:31 · 461 阅读 · 0 评论 -
C中变量的存储类型及作用域
C语言变量的存储类别收集网上资料整理 内存中供用户使用的存储空间分为代码区与数据区两个部分。变量存储在数据区,数据区又可分为静态存储区与动态存储区。 静态存储是指在程序运行期间给变量分配固定存储空间的方式。如全局变量存放在静态存储区中,程序运行时分配空间,程序运行完释放。 动态存储是指在程序运行时根据实际需要动态分配存储空间的方式。如形式参数存放转载 2012-11-03 20:43:26 · 612 阅读 · 0 评论