最近遇到C#的两个坑

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

你可能感兴趣的:(最近遇到C#的两个坑)