关于swap交换操作的新方法

swap:

在oi中,swap用于交换两个变量的数值。

初学oi时,我们这样操作:

也就是说,需要一个temp变量来寄存x或y的值,因为当一个变量被赋值成为另一个变量时,没有temp它的值会丢失。

貌似很基础的亚子。

进阶版:

进阶版swap不在需要中间变量temp,常数也更优:

具体是这样的:

int sswap(int &x, int &y)
{
     x ^= y ^= x ^= y ;
}

原理:一个数经过两次异或后,等于自己:

实在不理解手动膜你啦。

于是我们把上面的式子疯狂展开:

还不理解的话:

这里temp就是第一步x^y的值,把他们不同的部分作为中间变量,从而在上方第3,4行分别以第一步的x值为temp异或出自己的值。

完结。

/滑稽/

原文地址:https://www.cnblogs.com/lbssxz/p/11747047.html

时间: 2024-11-02 12:16:58

关于swap交换操作的新方法的相关文章

设置/修改linux上的swap交换分区的方法

设置centos上的swap交换分区的方法 作为linux世界里最稳定的服务器版本,rhas5一直有很大的应用面,之前一直关注的是freebsd,因为应用的需要,特别在配合mysql和oracle上red hat有着太多优势. 用centos来代替red hat as的使用,因为centos5是利用rhas5的源码,去掉redhat的商标.图标之后编译发行的,是最一个源码编译版本,我用的是centos 5.2 在安装centos 5.2的时候,忘设置swap交换分区,在内存小的情况下,增大swa

交换ctrl和caps_loack的新方法

交换ctrl和caps_loack的新方法 Table of Contents 1 过程 1 过程 debian用了几年,由于emacs的关系,一直将右ctrl和caps_lock键交换,使用的是xmodmap 方式,写了.Xmodmap脚本,在.xinitrc中加入:xmodmap -/.Xmodmap,但最近这个方法无效 了,我只能在.bashrc中执行脚本,但是没开一次终端,脚本都会执行一次,所以再次打开 终端,键位就恢复了. ! ! Swap Caps_Rock and Control_

揭开Linux操作系统的Swap交换区之谜

Swap,即交换区,除了安装Linux的时候,有多少人关心过它呢?其实,Swap的调整对Linux服务器,特别是Web服务器的性能至关重要.通过调整Swap,有时可以越过系统性能瓶颈,节省系统升级费用. Swap的原理是一个较复杂的问题,需要大量的篇幅来说明.在这里只作简单的介绍,在以后的文章中将和大家详细讨论Swap实现的细节. 众所周知,现代操作系统都实现了“虚拟内存”这一技术,不但在功能上突破了物理内存的限制,使程序可以操纵大于实际物理内存的空间,更重要的是,“虚拟内存”是隔离每个进程的安

linux swap交换空间

linux内存通过 virtual memory 虚拟内存来管理整个内存, physical RAM物理内存和swap交换空间即为virtual memory总量. swap的使用场景 swap主要有两个用处 1.当系统需要比物理内存更多的内存空间的时候,内核会把内存里边用得比较少的内存页面swap out到交换分区,以空出物理内存给当前应用来快速运行. 2.某些应用启动的时候初始化但是随后的应用运行期间不再使用的内存页面,系统会把这部分页面也swap out到交换空间,以留出物理内存页面给其他

centos中设置swap交换空间的大小设置和swappiness的比例设置

首先使用free -m命令查看内存使用情况和swap的大小 关闭swap: 设置swap的大小: bs指的是Block Size,就是每一块的大小.这里的例子是1M,意思就是count的数字,是以1M为单位的. count是告诉程序,新的swapfile要多少个block.这里是1024,就是说,新的swap文件是5G大小. 注意:可能需要点时间完成此步,耐心等待完成. 把增大后的文件变为swap文件: 重新打开swap:  让swap在启动的时候,自动生效.打开/etc/fstab文件,加上以

几个 Ceph 性能优化的新方法和思路(2015 SH Ceph Day 参后感)

一周前,由 Intel 与 Redhat 在10月18日联合举办了 Shanghai Ceph Day.在这次会议上,多位专家做了十几场非常精彩的演讲.本文就这些演讲中提到的 Ceph性能优化方面的知识和方法,试着就自己的理解做个总结. 0. 常规的 Ceph 性能优化方法 (1). 硬件层面 硬件规划:CPU.内存.网络 SSD选择:使用 SSD 作为日志存储 BIOS设置:打开超线程(HT).关闭节能.关闭 NUMA 等 (2). 软件层面 Linux OS:MTU.read_ahead 等

Linux基础-swap交换分区

任务:对一块15G大小的硬盘进行分区,主分区为5G,扩展分区10G,一个逻辑分区5G作为swap交换分区,并激活查看新的swap分区 第一步,建立的新的SCSI硬盘,开启Linux系统前添加一块大小为15G的SCSI硬盘 第二步,开启Linux终端,右击桌面,打开终端,为新加的硬盘分区,1个主分区大小为5G,剩余空间给扩展分区,在扩展分区上划分1个逻辑分区,大小为5G 查看硬盘的连接情况,出现/dev/sdb,证明第二块SCSI硬盘添加成功并被操作系统识别 使用fdisk建立主分区,大小为5G.

关于Linux系统的swap交换空间

用Ubuntu已经将近1年了,最近重装了16.04之后,每天到下午5点左右,都会发现Swap交换空间有几百兆的写入,系统内存8G,硬盘是SSD,i5处理器,配置中档,也没有启动什么大型软件,就是用IDEA做开发,虽然没有影响,但本着一颗求知的心,google一下,第一篇是<All about Linux swap space>,口气很大,直接翻译了. Linux将随机存储RAM称为内存页.交换技术就是将一页内存复制到预先设定的硬盘上的交换空间,来释放该页占用内存.物理内存和交换空间的和就是可提

swap交换分区

swap交换分区虚拟内存(Vitrual memory):即用软件模拟出来的内存,是将硬盘空间模拟成内存来用,用来补充物理内存不足的问题.在Linux系统中的虚拟内存是用交换分区来实现的. 虚拟内存的参考值:物理内存的1.5-2倍注:当物理内存大于或等于8G时,可以考虑关掉虚拟内存功能. win7虚拟内存设置:计算机--->属性--->高级--->性能--->设置--->高级--->更改--->根据提示设置注:win7是在每个盘(分区)中用pagefile.sys