gcc 头文件依赖关系 分析工具
摘要:http://gernotklingler.com/blog/open-source-tools-examine-and-adjust-include-dependencies/
阅读全文
局部静态变量是如何做到只初始化一次的?
摘要:关于编译选项-Wa,-adlhn参考http://blog.csdn.net/lanxinju/article/details/5900986以下内容来自于内网别的高人的回复可以写个程序测试一下:class A{public: A() {}public: int a;};int stat...
阅读全文
how-to-redirect-cin-and-cout-to-files
摘要:#include #include #include void f(){ std::string line; while(std::getline(std::cin, line)) //input from the file in.txt { std::cout >...
阅读全文
gdb 小备注
摘要:http://zhiwei.li/text/tag/gdb/page/2/http://blog.csdn.net/haoel/article/details/28791. 想查看造成core的query,但是默认print字符串的长度是200,可以set print elements 0,即可完整print全部字符串.2. Gdb的时候想要看到想要的代码,但是一个一个的通过directory添加太麻烦了,可以一次性在gdb开始的时候将全部源码路径添加进去,即可自由查看.举例如下:gdb `find isearch_cn_4_2_1.trunk -type d -printf '-d
阅读全文
[转]剖析top命令显示的VIRT RES SHR值
摘要:http://yalung929.blog.163.com/blog/static/203898225201212981731971/http://www.fuzhijie.me/?p=741引言:top命令作为Linux下最常用的性能分析工具之一,可以监控、收集进程的CPU、IO、内存使用情况。比如我们可以通过top命令获得一个进程使用了多少虚拟内存(VIRT)、物理内存(RES)、共享内存(SHR)。最近遇到一个咨询问题,某产品做性能分析需要获取进程占用物理内存的实际大小(不包括和其他进程共享的部分),看似很简单的问题,但经过研究分析后,发现背后有很多故事……1VIRTRESSHR的准确含
阅读全文
Linux内存点滴 用户进程内存空间
摘要:http://www.perfgeeks.com/?p=723http://www.perfgeeks.com/?p=770经常使用top命令了解进程信息,其中包括内存方面的信息。命令top帮助文档是这么解释各个字段的。 VIRT , Virtual Image (kb) RES, Resident size (kb) SHR, Shared Mem size (kb) %MEM, Memory usage(kb) SWAP, Swapped size (kb) CODE, Code size (kb) DATA, Data+Stack size (kb) nFLT, Page Fault c
阅读全文
linux core文件机制
摘要:http://www.51testing.com/?uid-159438-action-viewspace-itemid-102761在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息)。使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数。1.core文件的生成开关和大小限制---------------------------------1)使用ulimit -c命令可查看core文件的生成开关。若结果为0,则表示关闭了此功能,不会生成core文件。2) 使用ulimit -c filesize命令,可以限制core文件的大
阅读全文
linux 获得当前进程 对应的可执行文件的 绝对路径
摘要:先说在应用层怎么搞这个事,很简单:#include<stdio.h>#include<unistd.h>intmain(){charlink[100],path[100];sprintf(link,"/proc/%d/exe",getpid());/////////////readlink(link,path,sizeof(path));//////////////printf("%s/n",path);return0;}或者#include<stdio.h>#include<unistd.h>char*g
阅读全文
Linux平台gcc和动态共享库的基础知识
摘要:http://www.iteye.com/topic/261176对大多数不从事Linux平台C语言开发的人来说,GNU gcc的一套工具和Linux平台的共享库的使用还是十分陌生的,其实我也不太熟悉,姑且写点基础知识,权当做备忘吧。一、GNU gcc的编译工具用法我们先来写一个简单的C程序:hello.cC代码#include<stdio.h>voidprint_hello(){printf("HelloWorld\n");}intmain(intargc,charargv[]){print_hello();return0;}定义了一个print_hello函
阅读全文
C++ new 和Placement New 以及nothrow new
摘要:new有三种使用方式:plain new,nothrow new和placement new。 (1)plain new顾名思义就是普通的new,就是我们惯常使用的new。在C++中是这样定义的: void* operator new(std::size_t) throw(std::bad_alloc); void operator delete(void *) throw();提示:plain new在分配失败的情况下,抛出异常std::bad_alloc而不是返回NULL,因此通过判断返回值是否为NULL是徒劳的。(2)nothrow new是不抛出异常的运算符new的形式。nothrow
阅读全文
C++ 模板里面的typename
摘要:最近写个小东西,遇到模板的一个报错,挺有意思的,错误代码如下1#include<iostream>2#include<set>3usingnamespacestd;45template<classT>6voidSet2Str(set<T>inset)7{8//typenameT::iteratoritset;9set<T>::iteratoritset;10}111213intmain(intargc,charconst*argv[])14{15set<int>a;16Set2Str<int>(a);1718r
阅读全文
Linux网络编程IPv4和IPv6的inet_addr、inet_aton、inet_pton等函数小结
摘要:知识背景:210.25.132.181属于IP地址的ASCII表示法,也就是字符串形式。英语叫做IPv4 numbers-and-dots notation。如果把210.25.132.181转换为整数形式,是3524887733,这个就是整数形式的IP地址。英语叫做binary data。(其实binary是二进制的意思)详细介绍,请参考:网络字节序与主机字节序的转换问题所在:如何在字符串形式的IP和整数形式的IP之间转换呢?转换函数:int inet_aton(const char *cp, struct in_addr *inp);in_addr_t inet_addr(const ch
阅读全文
字节序(Endian),大端(Big-Endian),小端(Little-Endian)
摘要:http://www.cppblog.com/tx7do/archive/2009/01/06/71276.html在各种计算机体系结构中,对于字节、字等的存储机制有所不同,因而引发了计算机通信领域中一个很重要的问题,即通信双方交流的信息单元(比特、字节、字、双字等等)应该以什么样的顺序进行传送。如果不达成一致的规则,通信双方将无法进行正确的编/译码从而导致通信失败。目前在各种体系的计算机中通常采用的字节存储机制主要有两种:big-edian和little-endian。字节顺序Endian现代的计算机系统一般采用字节(Octet, 8 bit Byte)作为逻辑寻址单位。当物理单位的长度大于
阅读全文
select,poll,epoll用法
摘要:http://blog.csdn.net/sunboy_2050/article/details/6126712select用法#include <sys/time.h> #include <sys/types.h> #include <unistd.h> #include <sys/select.h>int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); int pselect(int n, fd_set
阅读全文
TCP三次握手/四次挥手
摘要:http://blog.csdn.net/sunboy_2050/article/details/6057759TCP三次握手TCP连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换TCP窗口大小信息。以下步骤概述了通常情况下客户端计算机联系服务器计算机的过程:1.客户端向服务器发送一个SYN置位的TCP报文,其中包含连接的初始序列号x和一个窗口大小(表示客户端上用来存储从服务器发送来的传入段的缓冲区的大小)。2.服务器收到客户端发送过来的SYN报文后,向客户端发送一个SYN和ACK都置位的TCP报文,其中包含它选择的初始序列号y、对客户端的序列号的确认x+1和
阅读全文
linux socket常用函数以及使用顺序
摘要:http://blog.csdn.net/sunboy_2050/article/details/5666272======== TCP========TCP_Serversocket()bind()listen()accept()write()read()close() 和shutdown()TCP_Clientsocket()connect()send() 和recv()close() 和shutdown()======== UDP========UDP_Serversocket()bind()sendto() 和recvfrom()close() 和shutdown()UDP_Clien
阅读全文
select、poll、epoll的比较
摘要:http://my.chinaunix.net/space.php?uid=20196318&do=blog&id=366042http://blog.endlesscode.com/2010/03/27/select-poll-epoll-intro/linux提供了select、poll、epoll接口来实现IO复用,三者的原型如下所示,本文从参数、实现、性能等方面对三者进行对比。int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout
阅读全文
select, iocp, epoll,kqueue及各种I/O复用机制
摘要:http://blog.csdn.net/heyan1853/article/details/6457362首先,介绍几种常见的I/O模型及其区别,如下:blocking I/Ononblocking I/OI/O multiplexing (selectandpoll)signal driven I/O (SIGIO)asynchronous I/O (the POSIXaio_functions)blocking I/O这个不用多解释吧,阻塞套接字。下图是它调用过程的图示:重点解释下上图,下面例子都会讲到。首先application调用 recvfrom()转入kernel,注意kerne
阅读全文
数据对齐---C语言:内存字节对齐详解
摘要:http://hi.baidu.com/jjpro/blog/item/06ea380859eac433e82488f8.html一、什么是对齐,以及为什么要对齐:1. 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。2. 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。其他平台可能没有这种情况, 但是最常见的是如果不按照适合其平
阅读全文
gdb的gui用法
摘要:调试代码的时候,只能看到下一行,每次使用list非常烦,不知道当前代码的contexthttp://beej.us/guide/bggdb/#compiling简单来说就是在以往的gdb开始的时候添加一个-tui选项.有的版本已经有gdbtui这个程序了在linux自带的终端里是正常显示的,但是在securecrt里面,可能由于编码的问题,边缘会有些乱码,不过不影响使用(如果你的程序有错误输出,会扰乱整个界面,所以在调试的时候,建议添加2>/dev/null,这样的话基本可用)启动gdb之后,上面是src窗口,下面是cmd窗口,默认focus在src窗口的,这样的话上下键以及pagedo
阅读全文