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

长沙便宜做网站帝国cms网站地图生成

长沙便宜做网站,帝国cms网站地图生成,房地产网站模版,千博企业网站管理系统旗舰版实验 相信大家都听过大名鼎鼎的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://www.dtcms.com/a/550271.html

相关文章:

  • 软件测试大赛赛前培训【Web测试】
  • 解决Docker Buildx导致镜像拉取失败的问题
  • 网站建设对电子商务中的作用网上销售哪些平台免费
  • 信贷员在哪个网站做推广陕西城乡住房建设厅网站
  • 从哪看出网站的建站公司php网站开发工程
  • zabbix 模板 监控项 图形
  • 不联网环境docker安装及python示例镜像
  • 10.30 MySQL数据库基础
  • 网站流量到底怎样赚钱的住建部2022年执行的新规范
  • 做番号网站犯法吗利州区住房和城乡建设部网站
  • Spring Boot Web开发篇:构建RESTful API
  • 跨越时间的鸿沟:解构 Rust 异步编程中的生命周期挑战
  • 网站的建设及维护报告2018年网站建设发言
  • 珠海网站开发排名江苏南京今天的新消息
  • 免费模型网站信息公司网站建设方案 游戏
  • 北京做冷冻牛羊肉的网站平邑县住房和城乡建设局网站
  • 一条SQL如何实现insertOrUpdate
  • 结构优化过程可视化的两种方法
  • 做网站建站点seo的描述正确
  • 百度站长seo搭建网站需要学什么
  • 旅游网站 系统江阴百度推广公司
  • Spring Al学习9:模型上下文协议(MCP)
  • 浙江省大成建设集团有限公司网站wordpress 插件有后门
  • linux 网站开发网络营销员岗位的职责与要求
  • 网站首页置顶是怎么做电商系统服务好的商家
  • 做网站没有数据家庭网做网站
  • 陕西高速公路建设网站有专门做辩论的网站吗
  • 怎么登陆建设工程网站php网站开发要学什么软件
  • Visual Basic 数据打印
  • 算法学习 18