如何 'free' 内存分配给 shell 中的变量
How to 'free' memory allocated to a variable in shell
function mem(){
local token
return $token
}
obj=$(ls) #list of object name
objstr=($obj) #array[i] whose ith element is object name
objno=$(echo "$obj" | wc -w) #the number of object name
for i in $(seq 0 $(($objno-1)))
do
objID=${objstr[$i]} #object name
IDlen=${#objID} #length of object name
for j in $(seq 0 $(($IDlen-1)))
do
subID=${objID:$j:1} #charater in the name
token=$(mem) #allocate local variable returned
token[0]+=$subID #concatenate characters
done
我想定义一个可以存储对象名称的变量。
(以一种我可以访问名称中每个字符的方式)
但最重要的是它必须是一次性的。
我想 'free' 在继续使用另一个对象名称之前分配给变量的内存以最小化开销。
所以我定义了一个函数 mem() ,它将 return 局部变量。
如果我每次在使用它之前将 token[0] 初始化为 returned 变量,
先前分配给变量的内存会发生什么变化? 'free'是否按预期编辑?
您没有在 shell 中释放内存;没有明确的方法来释放诸如变量存储之类的东西。也就是说,你可以试试
- 如果您的 shell 支持,则使用局部变量;当他们超出范围时,他们可能会被释放
unset NAME
完成后 NAME
请注意,就像在 C 中一样,这不能保证内存返回到 OS。
但是,你为什么首先要担心 shell 变量 的内存?您的实际问题是什么?如果内存使用和管理是一个约束,也许 shell 是错误的工具?
function mem(){
local token
return $token
}
obj=$(ls) #list of object name
objstr=($obj) #array[i] whose ith element is object name
objno=$(echo "$obj" | wc -w) #the number of object name
for i in $(seq 0 $(($objno-1)))
do
objID=${objstr[$i]} #object name
IDlen=${#objID} #length of object name
for j in $(seq 0 $(($IDlen-1)))
do
subID=${objID:$j:1} #charater in the name
token=$(mem) #allocate local variable returned
token[0]+=$subID #concatenate characters
done
我想定义一个可以存储对象名称的变量。 (以一种我可以访问名称中每个字符的方式) 但最重要的是它必须是一次性的。 我想 'free' 在继续使用另一个对象名称之前分配给变量的内存以最小化开销。 所以我定义了一个函数 mem() ,它将 return 局部变量。 如果我每次在使用它之前将 token[0] 初始化为 returned 变量, 先前分配给变量的内存会发生什么变化? 'free'是否按预期编辑?
您没有在 shell 中释放内存;没有明确的方法来释放诸如变量存储之类的东西。也就是说,你可以试试
- 如果您的 shell 支持,则使用局部变量;当他们超出范围时,他们可能会被释放
unset NAME
完成后NAME
请注意,就像在 C 中一样,这不能保证内存返回到 OS。
但是,你为什么首先要担心 shell 变量 的内存?您的实际问题是什么?如果内存使用和管理是一个约束,也许 shell 是错误的工具?