logo头像

野渡's小小知识乐园

C++基础之元编程与constexpr

元编程(metaprogramming)是一个典型的复合词,他由前缀 meta- 和词根 programming 复合而成,有“对一个程序进行编程”的意思。换句话说,编译器先编译你的代码,得到一份新的代码,然后再编译新的代码来解决问题。 模板元编程技术,即把一些可以在编译时完成的求值计算,通过模板特化的技术绑定到具体的实例化代码上,从而减少不必要的代码量,提升代码的运行效率。…

6.数组中的重复数

在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。…

第9章 虚拟内存之C程序中常见的内存相关错误

第9章 虚拟内存之C程序中常见的内存相关错误

对C/C++程序员来说,管理和使用虚拟存储器可能是个困难的, 容易出错的任务。与存储器有关的错误属于那些令人惊恐的错误, 因为它们在时间和空间上, 经常是在距错误源一段距离之后才表现出来。 将错误的数据写到错误的位置, 你的程序可能在最终失败之前运行了好几个小时,且使程序中止的位置距离错误的位置已经很远啦。而避免这种噩梦的最好方法就是防范于未然。 本节主要介绍《深入理解计算机系统》中介绍的 C程序中常见的内存操作有关的10种典型编程错误, 以便以后随时查看,复习。…

《TCP-IP详解卷1》第4章ARP:地址解析协议

《TCP-IP详解卷1》第4章ARP:地址解析协议

数据链路如以太网或令牌环网都有自己的寻址机制(常常为48 bit地址),这是使用数据链路的任何网络层都必须遵从的。一个网络如以太网可以同时被不同的网络层使用。 当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据48bit的以太网地址来确定目的接口的。设备驱动程序从不检查IP数据报中的目的IP地址。 地址解析为这两种不同的地址形式提供映射:32 bit的IP地址和数据链路层使用的任何类型的地址。ARP(地址解析协议)和RAR P(逆地址解析协议)就是这样的两个映射协议。 ARP为IP地址到对应的硬件地址之间提供动态映射。我们之所以用动态这个词是因为这个过程是自动完成的,一般应用程序用户或系统管理员不必关心。…

第9章 虚拟内存之动态内存分配与垃圾收集

第9章 虚拟内存之动态内存分配与垃圾收集

虽然可以mmap和munmap函数来创建和删除虚拟内存的区域,但是C程序员还是会觉得当需要额外的虚拟内存时,用动态内存分配器更方便,也有更好的可移植性。 动态内存分配器维护着一个进程的虚拟内存区域,称为堆。对于每个进程,内核维护着一个变量brk,它指向堆的顶部。分配器将堆视为一组不同大小的块的集合来维护。每个块就是一个连续的虚拟内存片,要么是已分配的,要么是空闲的。已分配的块显式地保留为供应用程序使用,空闲块保持空闲,直到它显式地被应用所分配。一个已分配的块保持已分配状态,直到它被释放,这种释放要么是应用程序显式执行的,要么是内存分配器自身隐式执行的。 分配器有两种基本风格,显式分配器要求应用显式释放分配的块,而隐式分配器(也叫做垃圾收集器)则要求分配器检查不再使用的块并释放。本文将对显示分配器和隐式分配器做更深入的讨论。…

《TCP-IP详解卷1》第3章 IP:网际协议

《TCP-IP详解卷1》第3章 IP:网际协议

IP是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输。但是IP提供不可靠、无连接的数据报传送服务。 不可靠在于它不能保证IP数据报能成功到达目的地,仅提供最好的传输服务。IP在传输服务时出现错误(如,路由器的缓冲区用完了),直接丢弃该数据报,然后通过ICMP消息给信源端。任何可靠性都必须由上层如TCP来提供。 无连接意味着IP不维护任何关于后续数据报的状态信息,每个数据报的处理都是独立的,可以不按顺序接收。不同的数据报都要独立地进行路由选择,可能选择不同的路线。 在本章,我们将简要介绍IP首部中的各个字段,讨论IP路由选择和子网的有关内容。还要介绍两个有用的命令:ifconfig和netstat。…