![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
yiling2012
这个作者很懒,什么都没留下…
展开
-
C/C++宏定义的可变参数
C/C++宏定义的可变参数编写代码的过程中,经常会输出一些调试信息到屏幕上,一般会调用printf这类的函数。但是当调试解决之后,我们需要手工将这些地方删除或者注释掉。最近在看《Linux C编程一站式学习》这本书,就想到一个方法:void myprintf(char* fmt, ...){}#ifdef DEBUG#define printf(转载 2014-07-19 11:08:06 · 206 阅读 · 0 评论 -
C++函数模板 模板实例化、具体化
函数模板是C++新增的一种性质,它允许只定义一次函数的实现,即可使用不同类型的参数来调用该函数。这样做可以减小代码的书写的复杂度,同时也便于修改(注:使用模板函数并不会减少最终可执行程序的大小,因为在调用模板函数时,编译器都根据调用时的参数类型进行了相应实例化)。下面来看看函数模板的使用过程:struct job{ char name[20]; int sa转载 2016-08-31 10:42:46 · 329 阅读 · 0 评论 -
DLL的进入退出——由DLL_PROCESS_ATTACH而联系搜索起来。
线程可以调用GetModuleHandle函数来判断一个DLL是否被载入了进程的地址空间, HINSTANCE GetModuleHandle(LPCTSTR lpszModuleName); 例子: HINSTANCE hinstDLL; hinstDLL = GetModuleHandle(“SomeDLL.dll”);转载 2016-06-23 11:24:04 · 1655 阅读 · 0 评论 -
c++ 中__declspec 的用法
c++ 中__declspec 的用法语法说明:__declspec ( extended-decl-modifier-seq )扩展修饰符:1:align(#) 用__declspec(align(#))精确控制用户自定数据的对齐方式 ,#是对齐值。e.g__declspec(align(32)) struct Str1{int转载 2016-05-22 14:37:55 · 212 阅读 · 0 评论 -
线程特定数据(学习)
1、首先,为什么要使用线程特定数据呢?什么是线程特定数据。这牵涉到重入函数和不可重入函数。重入函数就是在多个进程或者线程中,可以同时进行运行的函数,可重入函数就是不可以同时运行的函数,这个主要是可能多个进程或线程共享了一个变量,这个变量只有一个,这样同时运行的时候,就会出问题了,因为我们不知道这个静态变量具体是存入的什么值,可能刚存入一个值,立马又因为调用这个函数编程另外一个值。更加通俗的转载 2015-01-14 16:03:23 · 322 阅读 · 0 评论 -
c++类继承内存布局的
今天在网上看到了一篇写得非常好的文章,是有关c++类继承内存布局的。看了之后获益良多,现在转在我自己的博客里面,作为以后复习之用。——谈VC++对象模型(美)简.格雷程化 译译者前言一个C++程序员,想要进一步提升技术水平的话,应该多了解一些语言的语意细节。对于使用VC++的程序员来说,还应该了解一些VC++对于C++的诠释。 Inside the C++ O转载 2014-10-20 15:04:19 · 279 阅读 · 0 评论 -
基类,派生类,内存分配情况
派生类继承基类 内存分配时,是在于基类对象不同的内存地址处,按基类的成员变量类型,开辟一个同样的类型空间,但注意开辟后派生对象的空间,不是复制基类的成员的值,而是仅仅开辟那种成员类型的空间,未初始化时,里面存在的数是不确定的 然后派生类自己定义的成员变量是排在继承的A类成员下面,如果派生类定义的变量名与基类相同,则此变量覆盖掉继承的基类同名变量,注意,覆盖不是删除转载 2014-10-20 10:57:01 · 352 阅读 · 0 评论 -
C++类大小的一些说明
首先:我们要知道什么是类的实例化,所谓类的实例化就是在内存中分配一块地址.那我们先看看一个例子:#includeclass a {};class b{};class c:public a{ virtual void fun()=0;};class d:public b,public c{};int main(){ cout cout转载 2014-10-20 10:59:44 · 266 阅读 · 0 评论 -
告别cpp&h:hpp文件编写心得
hpp,顾名思义等于.h加上.cpp,在boost、Xerces等开源库中频繁出现,偶在机缘巧合之下,学得一招半式,遂记录如下,以供参考学习。 hpp,其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该hpp文件即可,无需再将cpp加入到project中进行编译。而实现代码将直接编译到调用者的obj文件中,不再生成单独的转载 2014-06-17 13:57:16 · 428 阅读 · 0 评论 -
genalloc — 通用内存分配器
genalloc 是 linux 内核提供的通用内存分配器,源码位于 lib/genalloc.c。这个分配器为独立于内核以外的内存块提供分配方法,采用的是最先适配原则,android 最新的ION 内存管理器对 ION_HEAP_TYPE_CARVEOUT 类型的内存就是采用的这个分配器。1、基础数据结构首先看下分配器用到的几个数据结构,struct gen_pool 用来描述一转载 2014-07-08 16:35:03 · 304 阅读 · 0 评论 -
Linux下的多线程编程
1 引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术已经被许多操作系统所支持,包括Windows/NT,当然,也包括Linux。 为什么有了进程的概念后,还要再引入线程呢?使用转载 2014-07-03 10:09:28 · 241 阅读 · 0 评论 -
C语言中malloc()和free()深入分析
在C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C中的malloc()和free()两个函数的了解甚少,只知道大概该怎么用——就是malloc然后free就一切OK了。当然现在对这两个函数的体会也不见得多,不过对于本文章第三部分的内容倒是有了转折性的认识,所以写下这篇文章作为一个对知识的总结。这篇文章之所以命名中有个“浅谈”的字眼,也就是这个意思了!希望对大家有一点帮助!如转载 2014-06-27 11:34:21 · 302 阅读 · 0 评论 -
C++new和delete实现原理
new和delete最终调用malloc和free,关于malloc和free实现原理参见这篇文章:http://blog.csdn.net/passion_wu128/article/details/38964045newnew操作针对数据类型的处理,分为两种情况:1,简单数据类型(包括基本数据类型和不需要构造函数的类型)代码实例:[cpp转载 2017-08-17 14:49:42 · 387 阅读 · 0 评论