最近遇到C#的两个坑
2018-03-26 本文已影响5人
子达如何
- 在一个密集的for循环里面,ManagedC++包装的轻对象,不能被GC释放
轻对象是指,在MC++看到只有一个Native的指针,真正的对象在C++侧,可以是很占用内存的一个地方。
但是,GC就是不释放,知道for循环结束之后,才慢慢释放。原因未明,解决办法是手动调用Dispose。 - Android使用C++的结构体的时候出现 signal 7 (SIGBUS), code 1 (BUS_ADRALN), fault addr错误。
C++结构体使用了pack(1),也就是一字节对其。可能触发了Android的非对齐的地址访问。但是,自己手写了各种非对齐的情况,依然无法重现问题。原因依旧未明。解决办法是去掉pack(1)。
怀疑其实是有很小的内存越界,放开pack(1)之后,内存之间的空隙增加了,减少了越界触发的异常。待查证实!