- 博客(33)
- 资源 (4)
- 收藏
- 关注
原创 给程序打上编译时间
今天突然想到这个问题,解决如下#define _compile_time __DATE__##" "##__TIME__std::string a= _compile_time;到时候一看就知道程序的新旧的
2015-03-27 11:56:36 371
转载 DLL导入导出的一些精辟见解
我相信写WIN32程序的人,做过DLL,都会很清楚__declspec(dllexport)的作用,它就是为了省掉在DEF文件中手工定义导出哪些 函数的一个方法。当然,如果你的DLL里全是C++的类的话,你无法在DEF里指定导出的函数,只能用__declspec(dllexport)导出 类。但是,MSDN文档里面,对于__declspec(dllimport)的说明让人感觉有点奇怪,先来看看MS
2015-03-25 10:54:39 552 1
转载 变量与内存分配
简单的可以理解为: heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。 stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。 预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据
2015-03-25 10:53:02 327
转载 C++之内存存储+一条进程的栈区、堆区、数据区和代码区在内存中的映射
在C\C++中,通常可以把内存理解为4个分区:栈、堆、全局/静态存储区和常量存储区。下面我们分别简单地介绍一下各自的特点。1 栈 通常是用于那些在编译期间就能确定存储大小的变量的存储区,用于在函数作用域内创建,在离开作用域后自动销毁的变量的存储区。通常是局部变量,函数参数等的存储区。他的存储空间是连续的,两个紧密挨着定义的局部变量,他们的存储空间也是紧挨着的。栈的大小
2015-03-25 10:50:24 1440
转载 Complete type & Incomplete type
刚看到上面的代码,相信很多朋友会疑惑,上面那个enum是干什么用的呢?不急,且听我一一道来。这里,”enum {type_must_be_complete = sizeof(C)}”的作用是为了防止C只有声明、没有定义,也就是为了确保C是完整的类型。为什么会这样呢?这是因为,在C++中,类型有Complete type和Incomplete type之分,对于Complete type, 它的
2015-03-25 10:25:08 2158
转载 incomplete type的危害
用delete删除一个只有声明但无定义的类型的指针,是危险的。这通常导致无法调用析构函数(包括对象本身的析构函数、成员/基类的析构函数),从而泄露资源。示例代码:引用:class C; // 在另一个cpp文件中定义C* createC(); // 在另一个cpp文件中定义int main() { C* p = c
2015-03-25 10:23:06 1153
转载 单引号字符串用法
今天在工作时看到一段略显奇怪的代码段,大概是这样的:switch (flag) { case 'ABCD': TODO break; case 'EFDG': ... break .... default:
2015-03-25 08:24:21 1526
转载 c/c++中#号的用法
第一种情况作为Stringizing Operator(#),暂叫字符串化吧。#define stringer( x ) printf( #x "\n" ) int main() { stringer( In quotes in the printf function call\n ); stringer( "In quotes when printed to the screen"\n );
2015-03-24 16:10:11 1479
原创 for(;;)与while(1)比较
12345678910 while (1)//00D5138E mov eax,1 //00D51393 test eax,eax //00D51395 je main+29h (0D51399h)
2015-03-24 14:29:06 363
转载 类超前引用
1、C++中的类相互包含(QT4) 所谓超前引用是指一个类型在定义之前就被用来定义变量和声明函数。 一般情况下,C/C++要求所有的类型必须在使用前被定义,但是在一些特殊情况下,这种要求无法满足,例如,在类time_outDialog中保留了对象指针,该对象用于显示/修改一些信息。为了实现对话框"应用"按钮,把对话框做的修改立刻更新到time_outDialog界面上,为
2015-03-24 10:33:05 845
转载 C++开发者都应该使用的十个C++11特性
[-]autonullptrRange-based for loops 基于范围的for循环Override和finalStrongly-typed enums 强类型枚举Smart Pointers 智能指针Lambdas非成员begin和endstatic_assert和 type traitsMove semantics Move语义结论在C++11新标准
2015-03-23 15:44:56 349
转载 类继承中,通过基类指针delete释放,是否会造成内存泄漏
[序言]很久不写C/C++技术贴了,算一下自己用C++也有7~8年了,虽然现在用Delphi比较多,但是对C++还是有一份热情.前段时间在CSDN看到一个帖子,让我感到非常失落, 很多人都没有引用权威文献来针对这个问题进行讨论,如果没有全文文献的引用,那么讨论将会是一个持久战.要结束这种情况,还是以书为准。如果大家都喜欢探讨技术,可以加入我的QQ:643439947一起学习[建议]
2015-03-23 13:39:56 643
转载 关于通过不含虚析构函数的基类类型的指针删除派生类对象的问题
如题。问这问题时先基于一个前提条件:析构函数不含释放其他资源的代码,甚至可以是空函数,甚至甚至都可以干脆的不写。这种情况下是否仍有任何问题。 这个问题的结论是 会导致未定义的行为(但不是内存泄漏那么简单)。具体如何就看编译器的实现了。 我们常用的编译器,如vc、gcc等都是用的尾部追加成员的方式实现的继承(前置基类的实现方式)。这样的话在最好的情况下,可以做到对于同一个对象,整个类 和
2015-03-23 13:38:44 669
转载 hpp文件的3点注意
hpp,顾名思义等于.h加上.cpp,在boost、Xerces等开源库中频繁出现,偶在机缘巧合之下,学得一招半式,遂记录如下,以供参考学习。 hpp,其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该hpp文件即可,无需再将cpp加入到project中进行编译。而实现代码将直接编译到调用者的obj文件中,不再生成单独的ob
2015-03-19 16:49:08 1794
转载 许式伟VS.张宴
主持人:冯大辉,现任丁香园 (http://www.dxy.cn)网站CTO。曾历任支付宝架构师、数据库团队负责人等职。许式伟:作为系统架构师,您一般会从哪些方面来保证网站的高可用性(降低故障时间)?张宴:很多因素都会导致网站发生故障,从而影响网站的高可用性,比如服务器硬件故障、软件系统故障、IDC机房故障、程序上线前测试未发现的Bug、遭受分布式攻击、突发访问人数剧增等。
2015-03-18 10:59:14 1053
转载 孙立VS. 孙朝晖
主持人:冯大辉孙立:你是如何在架构层面,提高开发人员开发效率的?比如通过合理的分层,不同层安排不同能力的开发人员。孙朝晖:首先孙立老师已经谈到了这个问题的两个核心,第一是合理的分层,第二是让不同能力层次的队伍有机组合。对于分层,具体到我们的技术体系,可以清晰地分成四个层次,对应四个技术层次,分别是:前端(JavaScript开发)、Web应用(PHP开发)、中间件(Java
2015-03-18 10:34:17 1713
转载 孙朝晖VS.李祎
主持人:冯大辉孙朝晖:如果你计划在技术体系中引入开源软件,评估的过程是怎样的?关注点有哪些?李祎:作为互联网企业,我们讲求的是快速开发。使用开源软件能有效地缩短开发时间,而且流行的开源软件由于源码开放,比我们自己编写的代码更稳定和可靠,所以我们在说客网站的开发中经常使用开源软件。在评估是否使用一款开源软件时我更关注下面几点。许可证(license)授权使用范围是否可商用。我
2015-03-18 10:33:49 1243
转载 杨海朝VS.孙立
主持人:冯大辉杨海朝:在错综复杂的庞大系统中,如何避免多条线频繁地发布新代码对线上业务的影响?孙立:在公司或者业务快速发展的过程中,应用系统的功能越来越丰富,系统模块也变得非常繁杂。由于前期没有进行良好的整体架构,后期又为了快速响应需求,所以系统模块、多个业务线之间的耦合性非常强,很可能代码也不太规范,导致出现发布了A系统的A模块的代码后,B系统的B模块出现了问题,而B系统的B模块
2015-03-18 10:32:48 1369
转载 岑文初VS. 杨海朝
主持人:冯大辉岑文初:模块化来降低耦合性时如何把握模块划分的粒度?如何权衡复用性与粒度过细导致依赖复杂的矛盾?杨海朝:耦合性是影响软件系统复杂程度和设计质量的重要因素,模块化设计的目标是建立模块间耦合度尽可能松散的系统,通过尽量使用数据耦合,少用控制耦合,限制公共耦合的范围和一定要避免使用内容耦合来降低接口的复杂性。在系统架构中模块化设计对于降低耦合性有非常重要的作用,相关
2015-03-18 10:29:40 923
转载 张宴VS.岑文初
主持人:冯大辉,现任丁香园 (http://www.dxy.cn)网站CTO。曾历任支付宝架构师、数据库团队负责人等职。张宴:在项目的架构设计中,对于未来可能发生的需求变更,你是如何考虑的?如何应对?岑文初:需求变更可以分为业务性和非业务性两类。对于业务性需求变更,思维方式应当按如下顺序进行:第一,是否已经有类似功能,需要做些改进就可以满足需求;第二,没
2015-03-18 10:20:14 982
转载 UTF8最好不要带BOM,附许多经典评论
UTF-8 不需要 BOM,尽管 Unicode 标准允许在 UTF-8 中使用 BOM。所以不含 BOM 的 UTF-8 才是标准形式,在 UTF-8 文件中放置 BOM 主要是微软的习惯(顺便提一下:把带有 BOM 的小端序 UTF-16 称作「Unicode」而又不详细说明,这也是微软的习惯)。BOM(byte order mark)是为 UTF-16 和 UTF-32 准备的,
2015-03-16 23:39:06 535
转载 大端小端,ascii,unicode,utf8,utf16,utf32,gb2312,gbk,gb18030等字符编码问题
字符编码的问题让我困惑了好久的一段时间,其实简单的想,字符编码没有什么东西的,可是想真弄明白还是花去了我一点时间,前端时间写了一个简单的log程序,主要的工作就是支持系统运行时输出日志信息,同时允许定制不同级别的日志输出,刚开始的时候只是写入到文件中,可用过之后发现,只是写入到文件中,在进行系统调试的时候不是很方便,还要打开文件,浏览,再返回源代码,如果能够有一个界面展示岂不是更好,列表显示日志,
2015-03-15 16:12:35 2323
转载 static_cast和reinterpret_cast
[cpp] view plaincopy static_cast和reinterpret_cast揭秘 收藏 本文讨论static_castreinterpret_cast reinterpret_cast可以转换任意一个32bit整数,包括所有的指针和整数。可以把任何整数转成指针,也可以把任何指针转成整数,以及把指针转化为任意类型的指针,威力最
2015-03-13 08:39:56 365
转载 工作线程中使用UpdateData出错解决方法
在工作线程中不能使用UpdateData来更新主线程中的数据。界面的东西,最好就是用主线程(界面线程)去执行相应的操作。要想在子线程(工作线程)里执行界面线程的操作,最好是向主线程发送消息。因为MFC的CWnd用到了TLS,所以不是线程安全的。解决办法:1.定义一个消息 #define WM_UPDATE_MESSAGE (WM_USER+200)2.定义消息映射BEGIN_MES
2015-03-12 11:32:55 1021
转载 C++ Unicode SBCS 函数对照表
C++ Unicode SBCS 函数对照表,以备日后查阅GenericSBCSUNICODETCHARcharwchar_t_TEOFEOFWEOF_TINTintwint_t_TSCHAR
2015-03-11 09:27:13 532
转载 宽字符集(unicode)操作函数
字符分类:宽字符函数普通C函数描述iswalnum()isalnum()测试字符是否为数字或字母iswalpha()isalpha()测试字符是否是字母iswcntrl()iscntrl()测试字符是否是控制符iswdigit()isdigit()测试字符是否为数字iswgr
2015-03-11 09:22:34 293
转载 MFC的RTTI
怎么设计RTTI呢?让我们想想,当你看到一种颜色,想知道的它的RGB成分比,不查色表行吗?当你持有一种产品,想知道它的型号,不查型录行吗?要到达RTTI的能力,我们(类库的设计者)一定要在类 构建 起来的时候,记录必要的信息,以建立型录。型录中的 类信息,最好以链表方式连接起来,将来方便一一比较。 我们这份“类别型录”的 链表元素 将以CRuntimeClass类来描述,CRun
2015-03-09 10:54:39 300
转载 设计模式之factory method与c++反射
设计模式之factory method与c++反射-记我曾经的误解 Factory Method的官方解释是: Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defe
2015-03-06 13:45:21 362
转载 C++ RTTI及“反射”技术
RTTI RTTI(Run-Time Type Information)运行时类型检查的英文缩写,它提供了运行时确定对象类型的方法。面向对象的编程语言,象C++,Java,delphi都提供了对RTTI的支持。 本文将简略介绍 RTTI 的一些背景知识、描述 RTTI 的概念,并通过具体例子和代码介绍什么时候使用以及如何使用 RTTI;本文还将详细描述两个重要的 RTTI 运算符的使用方
2015-03-06 13:25:39 450
转载 架构师接龙:盛大许式伟 VS 金山张宴
许式伟:作为系统架构师,您一般会从哪些方面来保证网站的高可用性(降低故障时间)? 张宴:很多因素都会导致网站发生故障,从而影响网站的高可用性,比如服务器硬件故障、软件系统故障、IDC机房故障、程序上线前测试未发现的Bug、遭受分布式攻击、突发访问人数剧增等。 一套良好的网站系统架构,应该尽可能地避免只有一台服务器、一个数据库、一套软件节点等单点故障的存在。单点故障一旦发生,将直
2015-03-06 11:11:19 682
转载 一个简单的RTTI实现
RTTI是"Runtime Type Information"的缩写,意思是:运行时类型信息.它提供了运行时确定对象类型的方法.最近在写的一些东西,不想使用MFC之类的框架,但是却在很多地方需要根据名称确定指针的转换类型或者利用抽象工厂生产抽象的类对象指针...我很不喜欢不容易维护且难看的"switch case",而C++本身的RTTI功能又显得很单薄...看来只有自己写一个C+
2015-03-06 10:45:57 644
转载 最快速度找到内存泄漏
最快速度找到内存泄漏许式伟2006年11月某日 内存管理是C++程序员的痛。我的《内存管理变革》系列就是试图讨论更为有效的内存管理方式,以杜绝(或减少)内存泄漏,减轻C++程序员的负担。由于工作忙的缘故,这个系列目前未完,暂停。 这篇短文我想换个方式,讨论一下如何以最快的速度找到内存泄漏。
2015-03-06 10:20:00 296
转载 关于内存对齐的那些事
Wrote by mutouyun. (http://darkc.at/about-data-structure-alignment/)1. 内存对齐(Data Structure Alignment)是什么内存对齐,或者说字节对齐,是一个数据类型所能存放的内存地址的属性(Alignment is a property of a memory address)。这个属性
2015-03-06 09:20:00 484
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人