You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用/dev/random输出填充指定容量的内存?

用随机数填充指定大小内存的实现方法

已知以下命令可分配任意大小的内存(例如1GB),且内存区域会被零填充:

< /dev/zero head -c $((1024**3)) | tail

但如何用类似方式,用随机数填充指定大小的内存(例如1GB)呢?

以下是几种尝试过的无效写法及问题:

  • 仅输出数百个随机字符,无法实现指定大小的内存分配:
    < /dev/random head -c $((1024**3)) | tail
    
  • 修改原始数据(移除\0),且仅能在变量中保存数百个字符而非1GB:
    output=$(sudo head -c $((1024**3)) /dev/random | tr -d '\0' | tail)
    
  • 思路可行,但同样只能在变量中保存数百个字符而非1GB:
    output=""
    while IFS= read -r -d '' substring; do
     output+="$substring"
    done < <(sudo head -c $((1024**3)) /dev/random | tail)
    

正确实现方案

核心问题分析

/dev/random是阻塞式设备,当系统熵池不足时会暂停输出,这就是为什么只能得到少量随机字符。换成**非阻塞的/dev/urandom**可以持续生成随机数据;另外,shell变量本身有内存限制,不适合存储1GB级别的数据,应让进程直接持有数据以占用内存。

方法1:用/dev/urandom生成指定大小随机数据并占用内存

< /dev/urandom head -c $((1024**3)) | tail

该命令会生成1GB随机数据,通过管道传递给tail,tail进程会将数据暂存在内存中,直到进程终止,以此实现指定大小的随机填充内存占用。

方法2:持久化占用内存(可选)

如果需要长时间保持内存占用,可以用命名管道配合tail -f:

# 创建命名管道
mkfifo /tmp/random_fifo
# 后台生成1GB随机数据写入管道
sudo head -c $((1024**3)) /dev/urandom > /tmp/random_fifo &
# 用tail -f持有数据,保持内存占用
tail -f /tmp/random_fifo

需要释放内存时,杀掉tail进程并删除管道:

pkill tail
rm /tmp/random_fifo

内容的提问来源于stack exchange,提问作者Alfred.37

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 18:42:54