1
2
它不会在堆栈上创建数组。如果需要,它会在GC堆上分配一个新的字符串。 该实现通过检查零终止符的现有字符串来工作——如果它认为可以在没有内存错误的情况下这样做(通过检查最后一个字节的对齐来猜测)。如果是4的倍数,它不会冒风险,但是如果不是,它会在指针前面读取一个字节,因为故障边界位于4个间隔的倍数上)。
如果已经有一个零字节,则返回未修改的输入。就是这样
无论如何,如果那里没有零字节,它将分配一个新的gc'd字符串,复制现有的字符串,附加零,并返回该字符串。这就是文档中的注释警告保存它的C函数的原因。如果C函数使它超出执行范围,那么将获得它的不是堆栈,而是D垃圾收集器。D的GC看不到由C函数分配的内存(除非特别通知它),并且会认为字符串在下次运行时没有被引用,从而释放它,导致在释放bug之后使用。
这个
因此,要再次总结这些属性:
|
Analon · 使用MATLAB通过同一端口发送多个串行信号 11 年前 |