anzhsoft的技术专栏

专注分布式资源管理和大数据处理平台: Since Dec. 2013

Linux Debugging(五): coredump 分析入门

作为工作几年的老程序猿,肯定会遇到coredump,log severity设置的比较高,导致可用的log无法分析问题所在。 更悲剧的是,这个问题不好复现!所以现在你手头唯一的线索就是这个程序的尸体:coredump。你不得不通过它,来寻找问题根源。本文通过一个常见的coredump,逐步讲解如何...

2014-01-27 17:33:00

阅读数 28836

评论数 0

Linux Debugging(四): 使用GDB来理解C++ 对象的内存布局(多重继承,虚继承)

关于C++虚函数,很多博文从各个角度来探究虚函数是如何实现的,或者说编译器是如何实现虚函数的。本文通过GDB来从另外一个角度来理解C++ object的内存布局,一来熟悉语言背后编译器为了实现语言特性为我们做了什么;二来熟悉使用GDB来调试程序。 同时,本文也将对如何更好的理解C++语...

2014-01-27 13:53:27

阅读数 23974

评论数 1

C++对象模型(五):The Semantics of Data Data语义学

本文是《Inside the C++ Object Model》第三章的读书笔记。主要讨论C++ data member的内存布局。这里的data member 包含了class有虚函数时的vptr和vtable的布局情况。

2014-01-26 21:29:38

阅读数 8573

评论数 2

Linux Debugging(三): C++函数调用的参数传递方法总结(通过gdb+反汇编)

上一篇文章《Linux Debugging:使用反汇编理解C++程序函数调用栈》没想到能得到那么多人的喜爱,因为那篇文章是以32位的C++普通函数(非类成员函数)为例子写的,因此只是一个特殊的例子。本文将函数调用时的参数传递方法进行一下总结。总结将为C++普通函数、类成员函数;32位和64位进行总...

2014-01-25 16:46:38

阅读数 19557

评论数 5

Linux Debugging(一): 使用反汇编理解C++程序函数调用栈

拿到CoreDump后,如果看到的地址都是????,那么基本上可以确定,程序的栈被破坏掉了。GDB也是使用函数的调用栈去还原“事故现场”的。因此理解函数调用栈,是使用GDB进行现场调试或者事后调试的基础,如果不理解调用栈,基本上也从GDB得不到什么有用的信息。本文还可以帮助你深入理解C++函数的局...

2014-01-24 17:23:50

阅读数 30689

评论数 8

QT Mobile: 一统IOS/Andriod/WP/等移动平台的江湖

QT5.2原生态支持IOS、Andriod。以后还会支持Windows Phone。多个平台,一套代码,真正做到跨平台。移动开发者的福音来了!!!

2014-01-17 14:38:24

阅读数 10174

评论数 2

Linux C 下的大文件操作

这里说的大文件指大小超过2G的文件。 小于2G的文件,用基础篇和高级篇中的函数都可以打开、读写。 大文件的打开: 在32位环境下,linux默认打开、读、写超过2G的文件会返回错误。定义如下宏可以突破这个限制,对read/write和fread/fwrite同时有效。 注意它必须定义在所有头文...

2014-01-13 16:23:44

阅读数 12020

评论数 1

Linux 共享内存 详解

一、什么是共享内存区 共享内存区是最快的可用IPC形式。它允许多个不相关的进程去访问同一部分逻辑内存。如果需要在两个运行中的进程之间传输数据,共享内存将是一种效率极高的解决方案。一旦这样的内存区映射到共享它的进程的地址空间,这些进程间数据的传输就不再涉及内核。这样就可以减少系统调用时间,提高程序...

2014-01-13 14:27:48

阅读数 11721

评论数 0

海量数据:判断一棵树是否为另一棵树的子树

T1是一棵含有几百万个节点的树,T2含有几百个节点。判断T2是否是T1 的子树。 首先考虑小数据量的情况,可以根据树的前序和中序遍历所得的字符串,来通过判断T2生成的字符串是否是T1字符串的子串,来判断T2是否是T1的子树。假设T1的节点数为N,T2的节点数为M。遍历两棵树算法时间复杂性是O(N ...

2013-12-28 19:35:11

阅读数 16397

评论数 2

检查一个二叉树是否平衡的算法分析与C++实现

今天面试一个实习生,就想既然是未出校园,那就出一个比较基础的题吧,没想到答的并不如人意,对于树的操作完全不熟悉,因此此题算是未作答。原来我想看一下他分析问题的思路,优化代码的能力。接下来会把最近半年我出的面试题整理出来,以来share给其它同事,而来算是自己校园记忆的一个总结,毕竟自己在项目中已经...

2013-12-28 14:50:11

阅读数 12727

评论数 2

Cracking the Coding Interview:: 寻找有环链表的环路起始节点

给定一个有环链表,实现一个算法返回环路的开头节点。 这个问题是由经典面试题-检测链表是否存在环路演变而来。

2013-12-25 13:07:15

阅读数 13248

评论数 3

C++11:使用 auto/decltype/result_of使代码可读易维护

C++11 终于加入了自动类型推导。以前,我们不得不使用Boost的相关组件来实现,现在,我们可以使用“原生态”的自动类型推导了! C++引入自动的类型推导,并不是在向动态语言(强类型语言又称静态类型语言,是指需要进行变量/对象类型声明的语言,一般情况下需要编译执行。例如C/C++/Java;弱...

2013-12-23 18:04:35

阅读数 16675

评论数 1

C++ 仿函数/函数指针/闭包lambda

在上一篇文章中介绍了C++11新引入的lambda表达式(C++支持闭包的实现),现在我们看一下lambda的出现对于我们变成习惯的影响,毕竟,C++11历经10年磨砺,出140新feature,对于我们的programming idiom有深远影响。 1) 仿函数 wikipedia 的定义...

2013-12-21 17:59:17

阅读数 15782

评论数 2

C++闭包: Lambda Functions in C++11

表达式无疑是C++11最激动人心的特性之一!它会使你编写的代码变得更优雅、更快速! 它实现了C++11对于支持闭包的支持。首先我们先看一下什么叫做闭包 维基百科上,对于闭包的解释是: In programming languages, a closure (also lexical c...

2013-12-20 17:29:06

阅读数 20909

评论数 6

C++对象模型(四):class成员初始化列表(Member Initialization List)

本文是Inside C++ Object Model Chapter 2 部分的读书笔记。 编译器如何处理初始化成员列表的。 下列情况中,必须要使用member initialization list进行data member 的初始化: 1) 当初始化一个reference member。 2...

2013-12-09 20:10:17

阅读数 10239

评论数 2

C++对象模型(三):Program Transformation Semantics (程序转换语义学)

本文是Inside The C++ Object Model Chapter 2 部分的读书笔记。是讨论编译器调用拷贝构造函数时的策略(如何优化以提高效率),侯捷称之为"程序转化的语义学" 或者说是是关于编译器对于程序是如何进行有效转化或者说翻译,以实现C++的语法机制。主要来...

2013-12-09 19:15:55

阅读数 12527

评论数 2

C++对象模型(二):The Semantics of Copy Constructors(拷贝构造函数之编译背后的行为)

本文是 Inside The C++ Object Model's Chapter 2  的部分读书笔记。 有三种情况,需要拷贝构造函数: 1)object直接为另外一个object的初始值 2)object作为函数以值传递的参数 3) object以函数返回值形式返回 如果class没有提供...

2013-12-08 21:50:07

阅读数 12781

评论数 2

C++对象模型(一):The Semantics of Constructors The Default Constructor (默认构造函数什么时候会被创建出来)

本文是 Inside The C++ Object Model, Chapter 2的部分读书笔记。 C++ Annotated Reference Manual中明确告诉我们: default constructor会在需要的时候被编译器产生出来。注意,这里是编译器需要,而不是程序需要。后来的C...

2013-12-08 10:24:30

阅读数 13024

评论数 6

提示
确定要删除当前文章?
取消 删除
关闭
关闭