随笔分类 -  C/C++

摘要:https://msdn.microsoft.com/zh-cn/library/dd293608.aspx lambda表达式是C++11的标准。如果用的是g++,记得加参数。 lambda表达式在其所在的位置上定义了一个匿名函数对象。 先给个例子: 以下时来自微软官网的解释: 1、捕获子句(la 阅读全文
posted @ 2016-08-09 23:57 三复苏 阅读(10009) 评论(1) 推荐(0)
摘要:将ipv4地址从数字点的形式转化为二进制数据,存储在struct in_addr中。如果给的地址无效,返回0 和inet_aton一样,将存储在字符串里的数字点形式的IPv4地址转化为二进制数据。输入地址无效会返回INADDR_NONE,实际值为255.255.255.255 将数字点形式的Ipv4 阅读全文
posted @ 2016-08-09 14:34 三复苏 阅读(156) 评论(0) 推荐(0)
摘要:英特网目前有两种地址格式:1、IPv4(32位地址格式)2、IPv6(128位地址格式)。IPv4的命名空间为PF_INET,IPv6的命名空间则为PF_INET6。 Internet 命名空间下的socket地址有以下两个组件: 1、想连接的机器的地址:有几种表示方式,1、Internet Add 阅读全文
posted @ 2016-08-09 00:32 三复苏 阅读(650) 评论(0) 推荐(0)
摘要:地址格式: 函数bind和getsockname使用通用数据类型:struct sockaddr*来指向socket地址。 sa_family 指的是地址格式, sa_data[14] 则是真正的地址内容。地址数据和格式挂钩的,什么样的格式对应什么样的内容。长度也依赖于格式,所以有可能大于14个字节 阅读全文
posted @ 2016-08-08 22:48 三复苏 阅读(1736) 评论(0) 推荐(0)
摘要:socket套接字和管道同样可以提供进程内通信。但套接字更胜一筹,不同的进程可以跨越不同的主机(说白了,支持网络通信)。使用套接字的知名程序:telnet、rlogin、ftp等。 你需要知道的一些基本原理: 使用socket时必须指定通信的类型和协议。 通信类型决定了以下内容:1、数据传输的基本单 阅读全文
posted @ 2016-08-08 18:21 三复苏 阅读(1779) 评论(0) 推荐(0)
摘要:单一进程使用管道基本上毫无意义。管道一般用来子进程和父进程之间的通信,或者兄弟进程间的通信。 创建管道的主要函数是pipe pipe函数创建一个管道,为管道的两端设置文件描述符。我们通过文件描述符进行读写。写入端的文件描述符存放在filedes[0]中,读出端则在filedes[1]中。(在linu 阅读全文
posted @ 2016-08-07 15:14 三复苏 阅读(588) 评论(0) 推荐(0)
摘要:虚拟内存按页划分,我们可以明确告诉系统:某一个虚拟内存页需要和实际内存帧相关联。这样一来,该内存页就被换进来了,而且不会被系统换出去。这一行为叫做锁页(locking a page)。 一般来讲页的换进换出是透明的,一般程序接触不到这一层。但是呢,锁页可以为我们带来如下好处: 1、速度:如果你的程序 阅读全文
posted @ 2016-08-05 23:22 三复苏 阅读(488) 评论(0) 推荐(0)
摘要:看到半动态申请内存,第一反应这是什么鬼? 实际上半动态内存申请很容易理解,在GNU C中使用alloca函数来实现 alloca函数可以像malloc一样动态申请内存(注意所申请的内存位置在调用函数的栈里面,页因此在调用函数结束后自动释放) 好处是显而易见的:既可以自由得申请空间,又不需要手动释放内 阅读全文
posted @ 2016-08-05 15:59 三复苏 阅读(269) 评论(0) 推荐(0)
摘要:linux中Obstack内存管理方式介绍 阅读全文
posted @ 2016-08-05 05:04 三复苏 阅读(2134) 评论(0) 推荐(1)
摘要:C里面没有垃圾回收机制,有时候你申请了动态内存却忘记释放,这就尴尬了(你的程序扮演了强盗角色,有借有还才是好孩子)。当你想找出内存泄露的地方时,有的投入海量的代码中,头痛不已。还好GNU C库提供了些简单的方法。 mtrace和muntrace两个函数可以帮助我们追踪动态内存使用情况。前提是我们设置 阅读全文
posted @ 2016-08-04 19:21 三复苏 阅读(2016) 评论(0) 推荐(0)
摘要:C语言有两种内存申请方式: 1、静态申请:当你声明全局或静态变量的时候,会用到静态申请内存。静态申请的内存有固定的空间大小。空间只在程序开始的时候申请一次,并且不再释放(除非程序结束)。 2、自动申请:当你声明自动变量的时候会使用自动申请。函数参数、局部变量都属于自动变量。这些变量空间在程序执行致相 阅读全文
posted @ 2016-08-04 14:50 三复苏 阅读(1752) 评论(0) 推荐(2)
摘要:程序员接触的内存空间和系统接触的物理内存空间是有所区别的。对于一般进程来讲,他面对的是一个线性虚拟内存空间:地址从0到最大值。每一个进程面对的虚拟内存空间都是一样的,都享有全部的内存地址。虚拟内存空间是线性的,但并不意味着是连续的。部分地址段的虚拟空间可以是缺失的(不是所有地址都可以用来存储数据)。 阅读全文
posted @ 2016-08-03 14:37 三复苏 阅读(614) 评论(0) 推荐(0)
摘要:error_report 阅读全文
posted @ 2016-08-03 01:42 三复苏 阅读(722) 评论(0) 推荐(1)
摘要:头文件没啥好说的,无非就是" "和< >的区别,这估计只要是学过C/C++的人都明白。现在的编译器对头文件的包含顺序没有要求,但老的C实现则不一样。当然,我们现在无需关心头文件顺序了。 我们为啥要包含头文件呢?头文件里面有定义嘛,使用任何函数之前都必须定义该函数。所以我们并不强求包含头文件,只要你自 阅读全文
posted @ 2016-08-02 21:17 三复苏 阅读(2415) 评论(0) 推荐(0)
摘要:C语言自身并没有提供IO,内存管理,字符串操作等类似的机制。作为弥补,C语言有一个标准库帮助C语言实现这些机制。我们在编译C程序的时候基本上都需要链接到这些库文件。 GNU C Library定义ISO C标准还有其他一些标准(POSIX)规定的函数库。 阅读全文
posted @ 2016-08-02 18:03 三复苏 阅读(835) 评论(0) 推荐(0)