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

c++怎么快速生成一个包含随机数据的1GB大型测试文件【实战】

用 fwrite 批量写入替代 std::ofstream << 可将1GB文件写入从十几分钟压至几秒;核心是绕过 iostream 格式化开销,以64KB–1MB 二进制块直写磁盘,配 binary 模式、预分配 vector 缓冲区、单次初始化 mt19937、精确字节数控制及 Windows 下 _setmode 强制二进制。用 fwrite 配合缓冲区批量写入,别用 std::ofstream <<直接用 std::ofstream 逐字节或逐行写,1GB 文件可能跑十几分钟;fwrite 批量写入能压到几秒内。核心是绕过 C++ iostream 的格式化开销和频繁 syscall,让数据以原始二进制块直通磁盘。每次写入至少 64KB(65536 字节),太小会抵消批量优势;1MB 是更稳妥的起点用 std::vector<uint8_t> 预分配缓冲区,填满后一次性 fwrite,避免 new/delete 频繁抖动不要用 std::rand() 填充——它慢且周期短;改用 std::mt19937 + std::uniform_int_distribution<uint8_t>,但注意:只初始化一次引擎,别在循环里反复构造文件打开必须用 "wb" 模式(C 风格)或 std::ios::binary | std::ios::out(C++ 风格),否则 Windows 下换行符会被悄悄替换,大小不准生成 1GB 要精确控制字节数,别靠循环次数估算1GB = 1073741824 字节(即 1 << 30),不是 1000*1000*1000。用近似循环次数(比如“写 100 万次 1KB”)极易偏差几百 MB,尤其当缓冲区大小不能整除总长度时。计算完整写入次数:full_writes = total_size / buffer_size剩余字节数:remainder = total_size % buffer_size先循环 full_writes 次写满缓冲区,再单独处理 remainder 字节(用 fwrite(buf, 1, remainder, fp))务必用 fseek(fp, 0, SEEK_END) + ftell(fp) 或 stat() 校验最终文件大小,CI 环境或某些文件系统(如 exFAT)可能延迟落盘Windows 下注意 _setmode(_fileno(fp), _O_BINARY)即使开了 "wb",MSVC CRT 在某些配置下仍可能对 FILE* 默认启用文本模式,导致写入 0x0A 时自动转成 0x0D 0x0A,文件瞬间变大且内容错乱。调用 fopen 后立刻加 _setmode(_fileno(fp), _O_BINARY)(仅 Windows)Linux/macOS 不需要,但加了也无害(宏定义为空)若用 std::ofstream,则无需此步——但你本就不该用它(见第一条)内存够就全塞进 std::vector,不够就分块生成1GB 数据全 load 到内存再写,对多数现代机器(16GB+ RAM)是最快路径;但若内存紧张(比如嵌入式或容器限制),必须流式生成——此时随机性会受限于 PRNG 状态复用。 Felvin AI无代码市场,只需一个提示快速构建应用程序

http://www.jsqmd.com/news/663857/

相关文章:

  • 智能代码生成与代码自愈结合(工业级自修复系统设计白皮书)
  • OpenMemories-Tweak:索尼相机隐藏功能深度解锁终极指南
  • 黎阳之光:全域实景立体管控,重构智慧电厂与变电站数字孪生新范式
  • Intel Realsense D435图像采集实战:用C接口和OpenCV imshow的正确姿势(解决颜色反色问题)
  • 鸿蒙游戏,会不会重演微信小游戏的爆发?
  • 你还在用Copilot式单点辅助?SITS2026已实现“全栈感知生成”:从Service Mesh配置→CRD定义→Argo CD Manifest全自动推演(附生成可信度量化评估矩阵V1.3)
  • Windows风扇智能控制终极指南:5分钟打造个性化散热方案
  • jEasyUI 合并单元格详解
  • 别再乱点‘是’了!Windows UAC这10个组策略设置,你真的都懂吗?
  • 从Copilot到CodeWhisperer再到自研模型:头部科技公司代码成本对比图谱(含TCO测算表·限内部流出版)
  • 向量引擎中转站上线后,我那份API密钥终于不用像爱情一样患得患失
  • 因果推断利器:一文读懂合成控制法的原理、实现与应用
  • langflow的自定义LLM模型接入第三方api
  • SITS2026深度拆解(全球仅7家实验室掌握的因果推理对齐协议)
  • Golang怎么安装和配置开发环境_Golang环境搭建完整教程【总结】
  • Angular 表单中基于下拉选择动态启用字段必填校验的完整实现
  • 【AGI地缘技术政治学】:为什么欧盟AI法案成“减速带”,而阿联酋、韩国正以国家基金撬动AGI初创?3类非传统玩家突袭路径曝光
  • B站视频转文字终极指南:5分钟掌握免费开源神器bili2text
  • 如何在STM32微控制器上快速部署CANopenNode协议栈的终极指南
  • 别再傻傻合并LoRA了!用vLLM 0.4.0在单卡上同时挂载多个微调模型(附OpenShift部署YAML)
  • Python 匿名函数 lambda 基础语法与场景
  • 为什么92%的企业AGI试点失败?——首份《AGI-human handshake协议》缺失清单(含可立即部署的协作契约模板)
  • 全球AGI研发版图正在重写(2024Q2最新动态):OpenAI闭源加速VS中国“智谱+百川+月之暗面”开源协同突围
  • 从理论到代码:SVPWM算法在Simulink与C语言中的实现与验证
  • 从DIY桌面CNC到工业机器人:手把手教你用LinuxCNC搭建自己的第一台数控系统(基于Xenomai实时补丁)
  • 从Cortex-M3到M0的IAP移植踩坑记:中断向量表处理有何不同?
  • 2026年3月烘干房品牌口碑推荐,加热炉/绝缘材料/空气加热器/30型真空滤油机/烘干设备,烘干房企业推荐 - 品牌推荐师
  • 人工智能发展简史:关键节点与技术突破
  • 【2026奇点智能技术大会权威内参】:首次公开AI代码配额管理三级熔断机制与企业落地配额计算公式
  • 同事悄悄问我,你知道咱们组就你没涨薪吗。我去找HR,HR说,你表现很稳定。我这才明白,「稳定」在职场是个贬义词