小编use*_*946的帖子

C++重新分配指针然后删除它

这样安全吗?我的意思是删除只关心它给出的地址还是删除原始指针变量很重要?

myClass *p1 = new myClass();
myClass *p2 = p1;
delete p2;
p1 = NULL;
p2 = NULL;
Run Code Online (Sandbox Code Playgroud)

c++ pointers

4
推荐指数
2
解决办法
1221
查看次数

为什么ILGenerator.Emit()在动态程序集中插入nop操作码?

我正在用C#构建一个小编译器,所以我不得不插手动态组件和发出操作码.现在,奇怪的是我的Emit()调用在生成的模块中创建了额外的nop操作码.在我的情况下并不是那么重要,因为性能并不是真正关键,但它真的让我感到困惑,为什么会发生这种情况.它似乎是在加载或存储到本地或参数后发生的.任何C#/动态组装专家可以指出我可以检查的事情?我附上了生成代码的示例,如果需要更多信息,请告诉我.谢谢.

IL_0000:  ldc.i4     0x0
IL_0005:  stloc      c
IL_0009:  nop
IL_000a:  nop
IL_000b:  ldloc      c
IL_000f:  nop
IL_0010:  nop
IL_0011:  stloc      i
IL_0015:  nop
IL_0016:  nop
IL_0017:  ldarg      s
IL_001b:  nop
IL_001c:  nop
IL_001d:  ldloc      i
IL_0021:  nop
IL_0022:  nop
IL_0023:  add
IL_0024:  stloc      $0
IL_0028:  nop
IL_0029:  nop
IL_002a:  ldloc      $0
IL_002e:  nop
IL_002f:  nop
IL_0030:  ldind.i1
IL_0031:  ldc.i4     0x0
IL_0036:  bne.un     IL_0040

IL_003b:  br         IL_008e

IL_0040:  ldloc      c
IL_0044:  nop
IL_0045:  nop
IL_0046:  stloc      $1
Run Code Online (Sandbox Code Playgroud)

根据要求,下面是我的代码的概述.有些东西缺失,因为代码被分成单独的模块,这些是执行顺序中最相关的部分.

string programName = …
Run Code Online (Sandbox Code Playgroud)

.net cil ilasm nop emit

2
推荐指数
1
解决办法
260
查看次数

标签 统计

.net ×1

c++ ×1

cil ×1

emit ×1

ilasm ×1

nop ×1

pointers ×1