你可以在朱莉娅预先为一个字符串分配空间吗?

ult*_*ian 9 arrays string performance memory-management julia

Julia文档描述了预分配内存Array通过避免垃圾回收来提高性能.String毕竟,这可能与一个Vector有关吗?String源代码在这里.

我的用例是我正在处理大型文本转储,使用readuntil()获取块,然后使用正则表达式match()matchall()replace().我已经用Perl编写了它,但想知道Julia是否可以更快.我已经知道了我必须处理的最长字符串的长度.

fs=open(fn,"r")
    while !eof(fs)
        text = readuntil(fs, "</tag>")
        text = match(r"pattern"s, text).match
        text = replace(text, r"badpattern", "goodpattern")
        text = replace(text, r"anotherbadpattern", "betterpattern")
        ... (dozens more replacements)
    end
close(fs)
Run Code Online (Sandbox Code Playgroud)

我希望磁盘I/O成为主要的瓶颈,但我有兴趣了解任何有用的东西.我欢迎任何关于加快这一进程的可能方法的建议.

slo*_*ain 6

Julia中的字符串是不可变的,因此预先定位的概念不起作用.

julia> a = "aaaa";
julia> pointer(a)
   Ptr{UInt8} @0x0000000119628f50

julia> a = "bbbb";
julia> pointer(a)
   Ptr{UInt8} @0x000000011963a030
Run Code Online (Sandbox Code Playgroud)