小编The*_*kis的帖子

C#和Java规范是否在有符号整数溢出时拼出相同的行为?

在C和C++中,未定义有符号整数上溢或下溢的行为.

在Java和C#(未经检查的上下文)中,行为似乎在某种程度上被定义.


从Java规范,我们有:

整数运算符不以任何方式指示上溢或下溢.

和:

Java编程语言对整数使用二进制补码表示[...]


从C#规范,我们有:

[...]在未经检查的上下文中,忽略溢出,并且丢弃不适合目标类型的任何高位.


通过测试两者,我得到了预期的环绕结果.从规范的措辞来看,我感觉在Java中结果是可移植的(因为语言需要2的补码表示),而C#可能有也可能没有结果(因为它似乎没有指定表示 - 只有高阶位被丢弃).

那么,两种语言规范是否都能在所有平台上保证相同的行为(只是用不同的措辞)?或者他们在我的测试用例中(在x86上和Sun的JRE和Microsoft的.NET下)恰好相同,但理论上在其他架构或实现方面可能有所不同吗?

c# java integer-overflow code-conversion language-lawyer

13
推荐指数
1
解决办法
226
查看次数

如何访问对象的某些(私有)属性?

我有

public class Item
{
    public string description { get; set; }
    public string item_uri { get; set; }
    public thumbnail thumbnail { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

和

public class thumbnail 
{

 private string url { get; set; }
 private string width { get; set; }
 private string height { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如果我创建的对象Item是这样

 Item item = new Item ();
Run Code Online (Sandbox Code Playgroud)

我如何可以访问的变量url,width和height?

谢谢!

c# object

11
推荐指数
1
解决办法
6543
查看次数

Java Null行为

我试图了解nullJava中的工作原理.

如果我们分配null给任何对象,那么场景背后会发生什么?它是否指定了指向null"对象"或其他内容的内存位置地址?

我已经尝试了以下程序,我已经明白所有人都null指向同一个位置.

但任何人都可以告诉我Java如何抛出NullPointerException以及如何null在Java中运行?

class Animal{
}

class Dog{
}


public class testItClass {

    public static void main(String args[]){
        Animal animal=null;
        Dog dog=null;

        if(((Object)dog) == ((Object)animal))
            System.out.println("Equal");
    }

}
Run Code Online (Sandbox Code Playgroud)

产量

等于.

java null nullpointerexception

10
推荐指数
1
解决办法
1085
查看次数

我应该使用什么而不是cl :: KernelFunctor?

我正在关注OpenCL的一些教程,他们提到了一个名为的类型cl::KernelFunctor.但是,找不到那种类型,当我查看AMD APP SDK的标题时,我看到cl::KernelFunctor该类的声明被注释掉了.

我应该使用什么代替这段代码来运行内核?

//run the kernel
cl::KernelFunctor simple_add(cl::Kernel(program, "simple_add"), queue, cl::NullRange, cl::NDRange(10), cl::NullRange);
simple_add(buffer_A, buffer_B, buffer_C);
Run Code Online (Sandbox Code Playgroud)

c++ opencl

10
推荐指数
2
解决办法
4742
查看次数

我有一个POCO,我可以从DbContext获取代理吗?

我有一个从POST请求获得的模型.由于我的视图定义了它的POCO类型,因此从提交的数据创建的对象也是POCO.作为POCO,它没有覆盖各种虚拟属性.因此,这些虚拟属性返回null.反过来,这意味着我必须根据外键进行单独的查询以浏览其属性(如果我想做更复杂的事情而不仅仅是保存它).

鉴于我的模型的POCO,我可以获得具有所有被覆盖功能的代理吗?

(我假设这是db.Entry().Entity为了什么,但它仍然返回POCO对象,而不是代理.我在断点暂停期间通过鼠标悬停检查对象的运行时类型.)

c# asp.net-mvc entity-framework

9
推荐指数
1
解决办法
1706
查看次数

如何防止视图将其模型传递给局部视图,而是传递null?

在ASP.NET MVC中并使用Razor,我有一个View(父)将另一个View(child)称为partial.两者都是强类型的,但它们具有不同的模型类型.

通常,在这些情况下,我们将模型从父视图显式传递给子视图.

@Html.Partial("Child", Model)
Run Code Online (Sandbox Code Playgroud)

我们也可以选择不明确指定要传递的Model,在这种情况下,父View将尝试将自己的Model传递给子View.如果类型匹配并且在大多数情况下是可取的,则这是有效的.

@Html.Partial("Child")
Run Code Online (Sandbox Code Playgroud)

但是,在我的情况下,我真的希望父视图不要尝试将任何内容传递给子视图.我该怎么办?

我想过尝试null明确传递:

@Html.Partial("Child", null)
Run Code Online (Sandbox Code Playgroud)

但是这仍然将父模型传递给子视图,导致错误: The model item passed into the dictionary is of type 'A', but this dictionary requires a model item of type 'B'.

(作为旁注,子视图是其模型的创建视图,这就是为什么我没有传递给它的实例.)

asp.net-mvc razor

9
推荐指数
2
解决办法
2687
查看次数

LLVM JIT教程代码使用简单的参数化函数崩溃.为什么?

我正在努力学习LLVM基础设施.我在MinGW安装上安装了Windows的LLVM二进制文件.

我正在关注LLVM网站上关于所谓的万花筒语言的教程.我有了一个源文件完全相同的代码清单在此页的末尾.

此外,如果它具有任何重要性,我正在构建使用以下标志(llvm-config提前获得,因为Windows shell没有非常舒适的替换语法):

clang++ -g -O3 kaleido.cpp -o kaleido.exe -IC:/MinGW/include -DNDEBUG -D__NO_CTYPE_INLINE -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -LC:/MinGW/lib -lLLVMCore -lLLVMSupport -lpthread -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMMCParser -lLLVMX86Desc -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMJIT -lLLVMRuntimeDyld -lLLVMExecutionEngine -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils -lLLVMipa -lLLVMAnalysis -lLLVMTarget -lLLVMMC -lLLVMObject -lLLVMCore -lLLVMSupport -lm -limagehlp -lpsapi

使用链接代码中实现的建议语言,我正在测试一些顶级表达式.首先,一个文字:

ready> 5 + 3;
ready> Read top-level expression:
define double @0() {
entry:
  ret double 8.000000e+00
}

Evaluated to 8.000000
Run Code Online (Sandbox Code Playgroud)

......按预期工作.然后是一个具有常量结果的函数定义:

ready> def f(x) 12; …
Run Code Online (Sandbox Code Playgroud)

c++ assembly jit llvm

8
推荐指数
1
解决办法
980
查看次数

在堆栈中转储寄存器以进行保守的堆栈扫描

我在C中写了一个非侵入性的保守GC,我对它的堆栈扫描阶段的正确性有些担忧.

具体来说,没有启用编译器优化,它工作正常,因为每个局部变量(指向一个对象)在堆栈上"可预测地"分配.在-O3,GC错过了一些有效的引用,我认为这是因为编译器选择使用寄存器(而不是GC扫描的堆栈)来处理某些变量和函数参数传递而GC不是(但是编程处理.(如果您怀疑这仍然不应该发生,并且我误解了问题的根源,请告诉我.)

除了一些基本要求(必须使用GC_malloc而不是mallocGC对象,不指向来自非GC堆的GC堆,当然,没有明确调用free),GC不应该有来自客户端的任何更多要求代码或编译器.因此,不需要客户端代码中的任何其他特殊模式.类似地,强制使用此GC编译的程序使用特殊的编译器标志(抑制堆栈优化)应该是最后的选择.有了这两个,这就是我的问题的构建.

我正试图找到一种方法使GC -O3无缝地处理案例(使用堆栈优化).这是我的思路(假设,更准确地说):

  1. 无论GCC(或任何有效的编译器)与优化有多远,它都不会到目前为止会损害程序的正确性.
  2. 如果[1]成立,我相信(至少在C的实际实现中)如果可达到的(在任何调用级别分配为本地)变量将始终可访问,则它必须在堆栈上或在当前的寄存器设置,但不是其他任何地方.
  3. 如果[2]成立,则应该意味着在GC循环开始时简单地将所有寄存器转储到堆栈将保证后续堆栈扫描现在也可以找到先前错过的引用.
  4. 另外,如果[1]和[2]成立,那么如果编译器允许覆盖任何变量(主要是基于寄存器的变量),则意味着它已经执行了某种程度的代码分析并且证明了该变量未在该函数中的任何其他位置使用.所以,从这个意义上说,如果我们在堆栈或寄存器转储中没有看到变量,即使它仍然在范围内(理论上),这也不应该引起警报(对我来说),因为编译器已经通过摆脱死亡参考,简单地帮助了GC.

问题1:是否所有我的假设4是否正确?

问题2:强制注册转储的最便携方式是什么?我发现一些消息来源声称一个简单的setjmp电话会产生这种效果.它是否正确?

c stack garbage-collection cpu-registers compiler-optimization

7
推荐指数
1
解决办法
311
查看次数

对数组进行排序,使得元素a [i] -a [i + 1] <= a [i + 1] -a [i + 2]的差异

自从我上周开始尝试按条件对N个元素的数组进行排序时,我的思绪就被吹了:2个元素之间的差异总是小于或等于接下来的2个元素.例如:

?[4] = { 10, 2, 7, 4}
Run Code Online (Sandbox Code Playgroud)

可以通过这种方式重新排列该数组:

  • {2, 7, 10, 4} 因为 (2 - ­7 = ­-5) < (7 - ­10 = -­3) < (10 - ­4 = 6)

  • {4, 10, 7, 2} 因为 (4 - ­10 = -­6) < (10 - ­7 = ­3) < (7 - ­2 = 5)

我考虑的一个解决方案就是改组阵列并每次检查它是否符合条件,这是一种有效的方法,适用于少量元素,但对于大量元素而言耗时甚至不可能.

另一个尝试用循环移动数组周围的元素,希望再次满足要求,但是这种方法再次非常耗时,有时也是不可能的.

试图找到一个算法似乎没有任何结果,但必须有一些东西.

非常感谢你提前.

arrays sorting algorithm

7
推荐指数
1
解决办法
344
查看次数

什么更有效?一个If Else还是一个HashMap?

我正在用Java编写一些代码来检查坐标是哪个象限,我想知道检查这个方法的效率更高:if-else块或使用HashMap.

HashMap看起来像这样:

private static final Map<Coordinate,Quadrant> quadMap = new HashMap<Coordinate, Quadrant>(){{
    put(new Coordinate(0,0), Quadrant.Q1);
    put(new Coordinate(0, 1), Quadrant.Q2);
    put(new Coordinate(1, 0), Quadrant.Q3);
    put(new Coordinate(1, 1), Quadrant.Q4);
}};
Run Code Online (Sandbox Code Playgroud)

然后我想要获得我的象限:

return quadMap.get(coordinate)
Run Code Online (Sandbox Code Playgroud)

if-else实现:

if (x < 1){
        if (y < 1){
            return Quadrant.Q1;
        } else {
            return Quadrant.Q2;
        }
    } else {
        if (y < 1){
            return Quadrant.Q3;
        } else {
            return Quadrant.Q4;
        }
    }
Run Code Online (Sandbox Code Playgroud)

或者还有另一种更有效的方法吗?

java if-statement hashmap

6
推荐指数
1
解决办法
3012
查看次数