摘要:
[ISO C11 Clause 3]对象(object):执行环境中数据存储的一块区域,它的内容可以用来表示值。-注释:对象可以具有特定的类型。--值(value):确定类型的对象的内容的确切含义。--访问(access):读取或修改一个对象的值。-注释1:如果只适用其中一种含义,则直接用“读取”或“修改”。-注释2:“修改”包含新值和先前存储的旧的值相同的情况。-注释3:未被求值的表达式不访问对象。--行为(behavior):外部的表现或动作。--未定义行为(undefined behavior):通过使用不可移植、错误的程序构造或错误的数据导致的ISO C没有任何要求的行为。--未确定行 阅读全文
posted @ 2014-03-05 13:35
foo__hack
阅读(278)
评论(0)
推荐(0)
摘要:
作者:@幻の上帝1 前置条件语文其实挺重要,这个没问题,但容易被忽视。当然,如果不是经常要折腾文档,要求不高;但起码要能说清楚话。数学重要,主要是广度,作为快速学习相关领域知识的基础。深度上面可深可浅,若只是学习语言,初中水平的基础足够。(不过要用标准库的complex什么的当然不止了。)而大部分人... 阅读全文
posted @ 2014-03-05 13:33
foo__hack
阅读(646)
评论(0)
推荐(0)
摘要:
对于初学者而言,一般意义上,程序错误可以分为两类,逻辑错误和非逻辑错误。前者是指,程序可以通过编译或链接但运行时不符合预期结果,后者是程序不能通过编译或链接。乍一看这样的分类非常清楚。不过,当引入语言标准对程序行为的规范时,事情变得复杂了。例如, ISO C/C++ 中,引起 undefined behavior (未定义行为)的如果是错误,属于以上分类中的哪一种错误——即,引起 undefined behavior 的程序是否需要保证编译或链接的成功?事实上,这一点在 ISO C 和 ISO C++ 中有微妙不同。首先,摘录和undefined behavior相关的关键术语定义如下:ISO 阅读全文
posted @ 2014-03-05 13:31
foo__hack
阅读(534)
评论(0)
推荐(0)
摘要:
栈比堆快的原因有一个很重要的原因就是栈页不会被从内存中换出,就这么简单。 阅读全文
posted @ 2014-03-05 13:29
foo__hack
阅读(673)
评论(2)
推荐(0)
摘要:
首先明确几个概念:字符串:形式语言理论研究的基本对象之一,是字符的有限序列。以下引用中文喂鸡“字符串”:设∑是叫做字母表的非空有限集合。∑的元素叫做“符号”或“字符”。在∑上的字符串(或字)是来自∑的任何有限序列。例如,如果∑ = {0, 1},则0101是在∑之上的字符串。字符串的长度是在字符串中字符的数目(序列的长度),它可以是任何非负整数。“空串”是在∑上的唯一的长度为0的字符串,并被指示为ε或λ。注意,这里的长度的概念是足够清晰的。以下引用中文喂鸡“字符串->字符串数据类型”:字符串长度尽管形式字符串可以有任意(但有限)的长度,实际语言的字符串的长度经常被限制到一个人工极大值。一 阅读全文
posted @ 2014-03-05 13:26
foo__hack
阅读(2045)
评论(0)
推荐(0)
摘要:
摘要 本文综述面向对象,尤其是面向对象编程的基本概念和一些其它编程范型的比较,并指出了现有初学者的一些常见误区。I.面向对象(Object-Oriented, OO)综述 公认的面向对象是一种“思想”,更精确地说是一种方法学(methodology)。面 向对象编程(OOP)、面向对象分析(OOA)、面向对象设计(OOD)等范畴是对此的衍生。容易理解,OOP指使用OO的方法进行编程;OOA和OOD 分别指使用OO的方法进行系统分析与设计(可以合称OOAD),是OO方法学在软件工程上的应用。对于使用OO方法学的软件开发,OOP是基础也是具有更 强的普遍性(即便使用OO方法,也并非所有的软件都.. 阅读全文
posted @ 2014-03-05 13:25
foo__hack
阅读(469)
评论(0)
推荐(0)
摘要:
原文:blog.llvm.org/2011/05/what-every-c-programmer-should-know.html人们偶尔会问为什么LLVM的汇编代码有时会在优化器打开时产生SIGTRAP信号。经过深入研究,他们发现Clang生成了“ud2”指令(假设x86代码)——和__built... 阅读全文
posted @ 2014-03-05 13:23
foo__hack
阅读(889)
评论(0)
推荐(0)
摘要:
前言:__cdecl:C/C++函数默认调用约定,参数依次从右向左传递,并压入堆栈,最后由调用函数清空堆栈,这种方式适用于传递参数个数可变的被调用函数,只有被调用函数才知道它传递了多少个参数给被调用函数,比如printf();__stdcall:参数由右向左传递,并压入堆栈,由被调用函数清空堆栈,当函数有可变参数个数时,函数调用约定自动转换成__cdecl调用约定;__thiscall:C++非静态成员函数默认调用约定,不能使用个数可变参数,调用非静态成员函数时,this指针直接保存在ecx寄存器中,不入栈,其他方面同__stdcall;__fastcall:凡是接口函数都必须指明其调用规范, 阅读全文
posted @ 2014-03-05 13:20
foo__hack
阅读(886)
评论(0)
推荐(0)
摘要:
极爽啊http://msdn.moonsols.com/ 阅读全文
posted @ 2014-03-05 13:19
foo__hack
阅读(480)
评论(0)
推荐(0)
摘要:
引言:xchg做了什么?首先,xchg eax, ecx并不会比mov edx, eax + mov eax, ecx + mov ecx, edx这三条指令加一起快,原因是xchg有副作用。Microsoft Platform SDK:MemoryBarrierThe MemoryBarrier macro ensures that all memory load or store operations before it are completed before any load or store operations following it.void MemoryBarrier(voi 阅读全文
posted @ 2014-03-05 13:15
foo__hack
阅读(345)
评论(0)
推荐(0)