当前位置: 首页 > wzjs >正文

网站备案 厦门郑州+高端网站建设

网站备案 厦门,郑州+高端网站建设,重庆网络网站推广,天堂 最新版中文在线实验 相信大家都听过大名鼎鼎的copy on write技术&#xff0c;并且学习过原理。但是可能对于代码中具体的发生场景&#xff0c;脑海中可能没有实体的映射。下面使用1个例子说明copy on write的发生时间。 有这么一个程序&#xff1a; #include <stdio.h> #include <…

实验

相信大家都听过大名鼎鼎的copy on write技术,并且学习过原理。但是可能对于代码中具体的发生场景,脑海中可能没有实体的映射。下面使用1个例子说明copy on write的发生时间。

有这么一个程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>// 打印当前进程的内存占用(常驻集大小)
void print_memory_usage(const char* stage) {FILE* file = fopen("/proc/self/status", "r");if (!file) {perror("fopen");return;}char line[256];while (fgets(line, sizeof(line), file)) {if (strncmp(line, "VmRSS:", 6) == 0) {printf("[%s] Memory Usage (VmRSS): %s", stage, line + 6);break;}}fclose(file);
}int main() {size_t size = 100 * 1024 * 1024; // 分配 100 MBvoid* ptr = malloc(size);if (!ptr) {perror("malloc");return 1;}printf("Step 1: After malloc (before memset)\n");print_memory_usage("After malloc");sleep(3);  // 给用户一点时间观察memset(ptr, 0, size); // 写入触发物理内存分配printf("Step 2: After memset (after touching memory)\n");print_memory_usage("After memset");sleep(3);  // 给用户一点时间观察free(ptr);printf("Step 3: After free\n");print_memory_usage("After free");return 0;
}

编译+运行

编译:

gcc do_copy_on_write.c -o do_copy_on_write

运行:

./do_copy_on_write

各部分说明

1. 分配内存(malloc)

void* ptr = malloc(size);

分配了一块大小为 100MB 的虚拟内存。此时操作系统只分配了虚拟地址空间,并没有实际分配物理内存页(因为还没有使用它)。程序紧接着打印此时的内存使用情况(VmRSS):

print_memory_usage("After malloc");

2.让程序睡眠3秒

  • 程序会 sleep(3) 秒,可以有时间手动观察或记录当前内存(可以用 tophtop 或查看程序输出)。

  • 你会发现此时内存几乎没有明显增长,只有很小的常驻内存(程序自身的开销)。

3. 访问内存触发分配(memset)

memset(ptr, 0, size);
  • 使用 memset 将这 100MB 全部设置为 0,相当于每个内存页都被写入了一次

  • 这会触发操作系统的延迟物理页分配机制,因为每个页第一次被写入,就必须真正分配物理内存。

  • 然后再次调用 print_memory_usage 打印新的 VmRSS,这时你会看到内存暴涨到 100MB 左右

 4. 最后释放内存

整个程序完整的输出为:

./a.out
Step 1: After malloc (before memset)
[After malloc] Memory Usage (VmRSS):         952 kB
Step 2: After memset (after touching memory)
[After memset] Memory Usage (VmRSS):      103912 kB
Step 3: After free
[After free] Memory Usage (VmRSS):          1536 kB

源码分析

TODO


文章转载自:

http://oALhvnrg.ryzgp.cn
http://wh5Vj2ay.ryzgp.cn
http://E76vJFQE.ryzgp.cn
http://pMT1gk2v.ryzgp.cn
http://tnUzVuFr.ryzgp.cn
http://gCR7rpve.ryzgp.cn
http://Gdv5VNR4.ryzgp.cn
http://GUo5cafD.ryzgp.cn
http://t39sKV3S.ryzgp.cn
http://liqKaLXq.ryzgp.cn
http://YZ66x0dv.ryzgp.cn
http://MciAmCuh.ryzgp.cn
http://BCrqIrdu.ryzgp.cn
http://tRSAiVLV.ryzgp.cn
http://ggEhrSnf.ryzgp.cn
http://MKt9FyFp.ryzgp.cn
http://arjeNj2a.ryzgp.cn
http://2NR5Rf6r.ryzgp.cn
http://K2RkGBAn.ryzgp.cn
http://SB1Drrv5.ryzgp.cn
http://jCjgKc31.ryzgp.cn
http://IQCPCLRc.ryzgp.cn
http://IjstvtN0.ryzgp.cn
http://76qmd4sX.ryzgp.cn
http://401k5KUY.ryzgp.cn
http://mrRBfGSN.ryzgp.cn
http://GyJN4JMw.ryzgp.cn
http://sFL5Y2fx.ryzgp.cn
http://9n6gDJZc.ryzgp.cn
http://Sa6ONRFO.ryzgp.cn
http://www.dtcms.com/wzjs/763703.html

相关文章:

  • asp网站咋做重庆建设工程信息网怎么录入备案
  • 定制网站建设宝安西乡wordpress国内备份神器
  • seo流量排名门户seo在网站制作
  • 网站有哪些风格深圳网站制作要多少钱
  • 为什么要建立企业网站个人手机网站开发
  • 网站推广优化淄博公司青岛房产网链家
  • 商标查询官方网站商业网站建设视频教程
  • 摄影网站功能设计软件开发公司网站
  • 怎么做卖花的网站网站内怎么做搜索
  • 西安网站设计哪家好网站右侧二维码
  • 早晨网站建设邵阳网站建设公司
  • 做抛物线的网站玛丽与魔女之花网页设计教程
  • 湘潭建设网站WordPress微信SVG图标
  • 阿里云服务器做盗版视频网站吗网站怎么发邮件
  • 中小型企业 公司网站建设万网的怎么做网站地图
  • 做搜狗网站优化点软件开发发布平台
  • 公司免费网站it运维外包费用标准
  • 手机p2p网站开发seo案例分析
  • 怎么制作网站软件失信人被执行人查询
  • 每天网站外链做几条最好wamp在网站建设中的功能及协作关系
  • 如何用本地视频做网站卡一卡二卡四老狼
  • 好孩子官方网站王建设重庆南川网站制作公司电话
  • 1+官网商城模板网站建设乐云seo效果好
  • 沃然建站平台官网物流网站素材
  • 学生心理健康网站建设论文凡科做的网站百度不到
  • 如何设置网站标题免费申请电子邮箱
  • 设计参考图哪个网站好版面设计图
  • 成都网站推广哪家专业如何在阿里巴巴上建设公司网站
  • 怎么看网站是什么语言做的后台html5经典网站
  • 北京建设企业协会网站国外电商平台排名