Programming(C/C++)
文章平均质量分 79
cha_echo
这个作者很懒,什么都没留下…
展开
-
Unsigned or Signed
C语言允许整数直接进行比较,对于有符合数之间进行,则会扩展小一些类型的数;对于整数之间的一个顺序是:long long > long > int > short > char; 同样的,如果是无符号数之间的运算,则会扩展小一些类型的无符号数,这种扩展也被称为0扩展(Zero extend),但如果是有符合数和无符号之间呢,则规则就有些不确定。 unsigned int原创 2010-03-20 18:55:00 · 416 阅读 · 0 评论 -
数据类型另思
C语言中包括了丰富的数据类型,包括了声明中显式定义的类型和用做表达式中间类型的导出类型。例如: int *p, x; *p = x; 从这里我们可以知道x的地址类型(它的左值)是一个指向整数的指针。x值的类型(它的右值)是一个整数。 C语言的类型其实可以用前缀形式表示,什么是前缀形式呢,看下面的例子: 我们用一个表达式: a原创 2010-03-21 01:12:00 · 453 阅读 · 0 评论 -
内联汇编
偶尔想看一下memcpy的源码,发现在linux里它是用内联汇编写的,所以就学了下,以前看linux源码时也曾碰到过很多内联汇编,但一直没有总结它的语法和使用,现在分析下,如有什么问题,欢迎留言讨论:-) 它的基本格式是: asm("assembly code"); 1、汇编指令必须在括号的引号里 2、如果有多条汇编指令,则需要用换号原创 2010-03-27 20:30:00 · 998 阅读 · 0 评论 -
指针和数组的效率对比
我们知道指针表达式和下标表达式是等价的,比如: array[10] = 10; *(array + 10) = 10; 或者有时候我们这样写: 2[array] 但因为它表示成指针表达式为*(2 + array) ,所以这种古怪的写法和array[2]是相等的。 那么你应该用哪一个呢? 很多人会选择下标表示,我想他们更多是考虑下标的可读性和容易理解,但如果从性能上讲的话,这个选择可能会影响运行时的效率。 我们来做个实验: 1 #incl原创 2010-08-30 01:16:00 · 1296 阅读 · 0 评论 -
ldd查看依赖关系
<br />通过readelf 或者objdump可以查看某一个可执行文件所依赖的共享库,而且这些共享库都是作为SONAME记录在ELF动态节的NEEDED上。<br />首先,我们看一下名词soname:<br />在linux上共享库都是以文件的形式来存放,而每一个共享库都被赋予了一个特别的名称,linux称之为soname。它包括了共享库的名称和版本号.然而这个soname只是一个软连接,它指向的文件才是真正的库文件。例如/lib/libc.so.6就是一个soname,它指向了 libc-2.10.原创 2010-09-29 00:50:00 · 7015 阅读 · 1 评论 -
用od转储二进制文件
od就是octal dump的意思,缺省情况下用八进制输出二进制文件zecho@zecho-laptop:~$ od /etc/ld.so.cache | head -50000000 062154 071456 026557 027061 027067 000060 001650 0000000000020 000003 000000 055470 000000 055507 000000 000003 0000000000040 055537 000000 055551 000000 000原创 2010-09-28 00:43:00 · 1753 阅读 · 1 评论