我有一些独立的Matlab程序,由于不同的原因需要访问它们所在目录中的文件(要么启动另一个程序,要么在那里读取一些XML文件).我有以下适用于Windows的功能:
function execDir = get_deployed_exec_dir()
% Returns the directory of the currently running executable, if deployed,
% an empty string if not deployed (or if unable to determine the directory)
execDir = '';
if isdeployed
[status, execDir] = system('path');
if status == 0
execDir = char(regexpi(execDir, 'Path=(.*?);', 'tokens', 'once'));
end
end
Run Code Online (Sandbox Code Playgroud)
为了得到它为Linux和Mac工作,我想我可以代替system('path')
使用system('echo $PATH')
,并改变正则表达式,以适应Unix的语法,但不像在Windows似乎当前正在运行的可执行文件的目录不被自动添加到路径的前变量.在Matlab中是否有一种方法可以获取当前正在运行的可执行文件的目录(我知道有脚本,但在部署时似乎没有正常工作),或者我应该在运行之前编辑设置MCR的脚本应用程序设置我的代码可以用system
命令读取的变量?
具体而言,用户计算机上的某个位置是文件夹EXECFOLDER
,结构如下:
EXECFOLDER
| exec1
| exec2
| run_exec1.sh
| run_exec2.sh
| data.xml
Run Code Online (Sandbox Code Playgroud)
我想弄清楚EXECFOLDER
无论用户在哪里运行的路径run_exec1.sh
(设置MCR和调用的脚本exec1
),以便 …
我正在测试一个我们在Matlab中开发的独立应用程序,当时我注意到它的内存使用量,根据Windows任务管理器,在16gb以上达到峰值几倍.我决定profile -memory on
在编译版本后面的脚本上运行Matlab的分析器,以查看内存峰值发生的位置,使用完全相同的输入.然而,它发现的最高峰值记忆是2400860.00 Kb,或大约1/4,对于基本上充当程序的功能main()
.
因此,我想知道人们是否注意到在运行已编译的Matlab程序和在Matlab中运行原始脚本之间存在巨大的内存使用差异.我注意到它在Matlab中运行了很长时间,但我认为这是由于分析器跟踪所有内存分配和解除分配,而不是读取和写入磁盘上的交换空间.