Linux下增加Sawp分区

一、新建磁盘分区作为swap分区
1.
root身份进入控制台(登录系统),输入
# swapoff -a #
停止所有的swap分区

2. fdisk命令(例:# fdisk /dev/sdb)对磁盘进行分区,添加swap分区,新建分区,在fdisk中用“t”命令将新添的分区id改为82Linux swap类型),最后用w将操作实际写入硬盘(没用w之前的操作是无效的)。

3. # mkswap /dev/sdb2 #格式化swap分区,这里的sdb2要看您加完后p命令显示的实际分区设备名

4. # swapon /dev/sdb2 #启动新的swap分区

5.为了让系统启动时能自动启用这个交换分区,可以编辑/etc/fstab,加入下面一行

/dev/sdb2 swap swap defaults 0 0


二、用文件作为Swap分区

1.创建要作为swap分区的文件:增加1GB大小的交换分区,则命令写法如下,其中的count等于想要的块的数量(bs*count=文件大小)。
# dd if=/dev/zero of=/root/swapfile bs=1M count=1024

2.格式化为交换分区文件:
# mkswap /root/swapfile #
建立swap的文件系统

3.启用交换分区文件:
# swapon /root/swapfile #
启用swap文件

4.使系统开机时自启用,在文件/etc/fstab中添加一行:
/root/swapfile swap swap defaults 0 0

新建和增加交换分区用到的命令为:mkswapswapon等,而想关闭掉某个交换分区则用“swapon /dev/sdb2”这样的命令即可。


### C++ 中 `std::vector` 的 `swap` 方法详解 #### 什么是 `std::vector::swap` `std::vector::swap` 是标准库中的一个成员函数,用于交换两个向量的内容。此操作不会改变这两个向量的容量(capacity),仅会交换它们所存储的数据[^1]。 #### 函数签名 以下是 `std::vector::swap` 的两种常见形式: 1. **成员函数版本** ```cpp void swap(vector& other); ``` 2. **全局函数版本** ```cpp template <class T, class Alloc> void swap(vector<T,Alloc>& lhs, vector<T,Alloc>& rhs); ``` 两者功能相同,区别在于调用方式不同。前者通过对象直接调用,后者作为独立函数调用[^3]。 --- #### 使用场景与示例代码 ##### 场景一:优化内存分配 当需要释放某个大容器的空间并保留其数据时,可以创建一个小容器并与原容器交换。 ```cpp #include <iostream> #include <vector> int main() { std::vector<int> largeVector(1000000); // 创建一个较大的向量 std::cout << "largeVector size: " << largeVector.size() << ", capacity: " << largeVector.capacity() << "\n"; std::vector<int>().swap(largeVector); // 将 largeVector 清空并释放空间 std::cout << "After swapping with an empty vector:\n"; std::cout << "largeVector size: " << largeVector.size() << ", capacity: " << largeVector.capacity() << "\n"; return 0; } ``` 上述代码展示了如何利用 `swap` 来清空并向量释放多余的内存资源。 --- ##### 场景二:高效地实现两容器互换 如果程序中有多个容器需要频繁切换内容,则可以直接使用 `swap` 而不是逐一复制元素。 ```cpp #include <iostream> #include <vector> int main() { std::vector<int> vec1 = {1, 2, 3}; std::vector<int> vec2 = {4, 5}; std::cout << "Before Swap:\nvec1: "; for(auto elem : vec1) std::cout << elem << " "; std::cout << "\n"; std::cout << "vec2: "; for(auto elem : vec2) std::cout << elem << " "; std::cout << "\n\n"; vec1.swap(vec2); std::cout << "After Swap:\nvec1: "; for(auto elem : vec1) std::cout << elem << " "; std::cout << "\n"; std::cout << "vec2: "; for(auto elem : vec2) std::cout << elem << " "; std::cout << "\n"; return 0; } ``` 这段代码演示了如何快速交换两个向量的内容而无需额外开销。 --- #### 性能优势 相比于手动拷贝或赋值整个容器,`swap` 提供了一种更高效的解决方案。它的时间复杂度通常为 O(1),因为只涉及指针级别的调整而非实际数据移动。 #### 注意事项 尽管 `swap` 不会影响大小(size),但它可能使迭代器失效。因此,在多线程环境中需谨慎处理共享状态下的容器交换操作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值