
C/C++ knowledge
文章平均质量分 69
foreverfresh
这个作者很懒,什么都没留下…
展开
-
article collections
时间计量(毫秒) http://www.cppblog.com/javado/archive/2006/07/15/10007.html转载 2006-12-04 17:54:00 · 816 阅读 · 0 评论 -
TLS的四种模式 Global Dynamic,Local Dynamic,Initial Exec和Local Exec
TLS的4种模式:Global Dynamic, Local Dynamic, Initial Exec和Local Exec。转载 2017-12-29 16:26:05 · 5718 阅读 · 0 评论 -
Linux应用层的定时器Timer使用详解
Linux应用层的定时器Timer使用详解转载 2017-12-29 16:17:23 · 22242 阅读 · 2 评论 -
error: cannot allocate memory in static TLS block
If shared library declease a single TLS global variable of size 1 (one) byte, and this TLS variable is accessed by the binary linking against it the shared library doesnt get loaded because there is an error creating the static TLS block.原创 2017-12-29 16:08:46 · 4649 阅读 · 1 评论 -
GCC 中零长数组与变长数组
前两天看程序,发现在某个函数中有下面这段程序:int n; //define a variable nint array[n]; //define an array with length n在我所学的C语言知识中,这种数组的定义在编译时就应该有问题的,因为定义数组时,数组的长度必须要是一个大于0的整型字面值或定义为 const 的常量转载 2014-02-10 18:13:51 · 802 阅读 · 1 评论 -
C语言之struct大小、首地址与内存对齐
被问到如下问题:给定一个结构体中某个变量地址,可否得到结构体变量的地址?答案是可以,但是对不同的场合有不同的结果;这与微处理器平台、编译器的处理不可分割。首先,对于处理器,大尾端、小尾端的因素必须考虑;其次:一、 ANSI C标准中并没有规定,相邻声明的变量在内存中一定要相邻。为了程序的高效性,内存对齐问题由编译器自行灵活处理,这样导致相邻的变量之间可能会有一些转载 2012-03-02 10:59:55 · 759 阅读 · 0 评论 -
数据模型(LP32 ILP32 LP64 LLP64 ILP64 )
32位环境涉及"ILP32"数据模型,是因为C数据类型为32位的int、long、指针。而64位环境使用不同的数据模型,此时的long和指针已为64位,故称作"LP64"数据模型。现今所有64位的类Unix平台均使用LP64数据模型,而64位Windows使用LLP64数转载 2011-08-30 11:01:47 · 6338 阅读 · 0 评论 -
代码测试、调试与优化的小结
代码写完以后往往要做测试(或验证)、调试,可能还要优化。 关于测试(或验证),通常对应着两个英文单词verification和validation,在资料[1]中有关于这个的定义和一些深入的讨论,在资料[2]中,很多人给出了自己的看法。但是我想正如资料[2]提到的: “The differences between verification and validation are un转载 2008-06-03 00:23:00 · 1264 阅读 · 0 评论 -
透过汇编另眼看世界之多继承下的虚函数函数调用
在我的前一篇文章"透过汇编另眼看世界之函数调用"中,我们通过汇编了解了虚函数调用的全部过程。在本文中我将分析多继承的情况下虚函数调用的情况。首先还是写一些简单的代码作为本文分析的例子代码: //the abstract base classclass IBase ...{public: virtual void func1() = 0; virtual void func2转载 2007-01-24 13:27:00 · 683 阅读 · 0 评论 -
静态对象如何初始化?
介绍当编译一个C++程序时,计算机的内存被分成了4个区域,一个包括程序的代码,一个包括所有的全局变量,一个是堆栈,还有一个是堆(heap),我们称堆是自由的内存区域,我们可以通过new和delete把对象放在这个区域。你可以在任何地方分配和释放自由存储区。但是要注意因为分配在堆中的对象没有作用域的限制,因此一旦new了它,必须delete它,否则程序将崩溃,这便是内存泄漏。(C#已经通过内存托管解转载 2007-01-24 17:14:00 · 3589 阅读 · 0 评论 -
透过汇编另眼看世界之函数调用
在我的另外一篇文章中 ,我提到了要通过汇编语言来分析虚函数调用的真相。我们现在就开始踏上这次艰辛却非常有意思的旅程。其他闲话少说,直接进入主题。本文中使用的C++代码:#include "stdafx.h"#include iostream>class CBase {public: virtual void callMe();};class CDerived: public CBas转载 2007-01-24 11:45:00 · 1000 阅读 · 0 评论 -
为什么会出现LINK2005"符号已定义"的链接错误?
许多Visual C++的使用者都碰到过LNK2005:symbol already defined和LNK1169:one or more multiply defined symbols found这样的链接错误,而且通常是在使用第三方库时遇到的。对于这个问题,有的朋友可能不知其然,而有的朋友可能知其然却不知其所以然,那么本文就试图为大家彻底解开关于它的种种疑惑。大家都知道,从C/C++源程序转载 2007-01-19 10:38:00 · 1169 阅读 · 0 评论 -
什么是weak symbol?
weak symbol 我们用nm看动态库时,会发现有些符号类型是"V",手册里解释如下:"V" The symbol is a weak object. When a weak defined symbol is linked with a normal defined symbol, the normal defined symbol is used with no err转载 2007-01-19 09:28:00 · 6350 阅读 · 1 评论 -
怎样得到虚函数表?
每个含有虚函数的类有一张虚函数表(vtbl),表中每一项指向一个虚函数的地址,实现上是一个函数指针的数组。 虚函数表既有继承性又有多态性。每个派生类的vtbl继承了它各个基类的vtbl,如果基类vtbl中包含某一项,则其派生类的vtbl中也将包含同样的一项,但是两项的值可能不同。如果派生类重载(override)了该项对应的虚函数,则派生类vtbl的该项指向重载后的虚函数,没有重载的话,则沿用转载 2007-01-17 18:58:00 · 1708 阅读 · 1 评论 -
The relationship of inline and virtual
test1:base.h:class base_c...{public: virtual ~base_c() ...{} virtual int getkind() ...{return 0;}};class derive: public base_c...{public: virtual int getkind() ...{return 1;}}; deri原创 2007-01-17 10:57:00 · 949 阅读 · 2 评论 -
asm pause 指令
http://blog.youkuaiyun.com/hintonic/article/details/7674024http://siyobik.info.gf/main/reference/instruction/PAUSEPAUSESpin Loop HintOpcodesHexMnemonicE转载 2018-01-06 22:50:01 · 2662 阅读 · 0 评论