易截截图软件、单文件、免安装、纯绿色、仅160KB

c,c++内存运行时深入研究

C/C++内存与运行时深入研究 [作者Jean.Love] 
-----------------------------------------------------------------------------------
(一)整数符号的陷阱 
(二)浮点数的本质 
(三)堆栈的内存管理结构 
(四)符号解析 
(五)对齐和总线错误 
(六)函数指针 
(七)虚函数的实现机理 
(八)引用的实现机理 
(九)虚拟继承对象的内存结构 
(十)混合编程时的初始化顺序 
(十一)数组和指针的异同 
(十二)const限定的传递性 
(十三)数据类型的限定性检查 
(十四)使用STL时的类型限制 
(十五)迭代器自身的类型 
(十六)运行时的类型信息 
(十七)new/delete重载 
(十八)如何拷贝一个文件 
(一)整数符号的陷阱 
        x
#include
int main(void){ 
int x=1; 
unsigned int y=2; 
int b=x
int b2=(x-y<0); 
printf("%d,%d\n",b,b2); 
return 0; 

它输出什么呢? 
1,0 
    令人震惊,不是吗,x
(1)x
(2)x-y的结果计算的时候,返回一个0xfffffffe,它被当成无符号数字理解并和0比较,显然<0不成立,返回0。 
总结一下,整数的运算,加减乘的时候,根本不管是否声明为是否有符号,在2进制cpu上面的计算是相同的,但是比较的时候(<,>,==)会根据类型,调用不同的比较指令,也就是以不同的方式来理解这个2进制结果。当signed和unsigned混用的时候,全部自动提升为无符号整数。 
#include
int main(void){ 
int i=-2; 
  unsigned j=1; 
if(j+i>1) //提升为两个uint相加
    printf("sum=%d\n",j+i);//打印的结果根据%d制定,j+i的内存值永远不变。
return 0; 

输出 
> ./a.out
sum=-1 
再举一个例子 
#include
int main(void){ 
int i=-4; 
unsigned int j=1; 
int ii=i+j; 
unsigned int jj=i+j; 
printf("%d,%ud\n",ii,jj); 
if(ii>1){printf("100000");} 
if(jj>1){printf("100001");} 
return 0; 

用gcc -S得到汇编,会发现if(ii>1)和if(jj>1)对应两个不同的跳转指�


相关文档:

C中malloc和free的原理 摘自techriver.cublog.cn

谈谈C语言的malloc()和free()
一、malloc()和free()的基本概念以及基本用法:
1、函数原型及说明:
void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。
关于分配失败的原因,应该有多种,比如说空间不足就是一种。
void free(void *Fir ......

linux 0.11 内核学习 console.c,控制台


参考《linux内核完全注释》和网上相关文章
/*
 * 控制台显示操作
 */
/*
 *  linux/kernel/console.c
 *
 *  (C) 1991  Linus Torvalds
 */
/*
 * console.c
 *
 * This module implements the console io functions
 * 'void con_init(v ......

C/C++关键字static,const,inline,define,typedef

C/C++关键字static,const,inline,define,typedef 


document.body.oncopy = function() {
if (window.clipboardData) {
setTimeout(function() {
......

50个c/c++源代码网站

C/C++是最主要的编程语言。这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码。这份清单提供了源代码的链接以及它们的小说明。我已 尽力包括最佳的C/C++源代码的网站。这不是一个完整的清单,您有建议可以联系我,我将欢迎您的建议,以进一步加强这方面的清单。
1、http://snippets.dzone.com/tag/c/ --数以千� ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号