下面的代码允许我为每种类型存储一个值 T :
public static class MyDict<T> {
public static T Value;
}
我可以存储与类型一样多的值,编译器不知道我将使用什么类型。 这些静态字段值如何存储以及存储在何处?
更新: 明明是存储在内存中的,但是我想了解一下这个内存。是堆吗?它是一些特殊的 CLR 内存吗?怎么称呼?还以这种方式存储了什么?
更新 2:
JITter 生成单个实现 MyDict<__Canon>对于 MyDict<T> 的所有引用类型参数.然而,这些值是分开存储的。我想每个类型参数仍然有一些每个类型参数的结构,虽然 thw vtable 链接到 JITted MyDict<__Canon> , 字段是分开的。我说得对吗?
最佳答案
How and where are those static field values stored?
它们存储在内存中 CLR 选择的位置。
Obviously it's stored in memory, but I want to know about this memory.
我假设是出于好奇。如果您根据这个问题的答案做出编程决定,那么您做错了什么。
Is it heap?
嗯,这不是堆栈或寄存器,这是肯定的。
Is it some special CLR memory?
是的。
What is it called?
高频堆。
What else is stored that way?
虚表。接口(interface)映射结构。方法说明。以及 CLR 认为将被频繁访问的任何其他内容,由 CLR 自行决定。我们在这里深入了解实现细节。
JITter generates a single implementation
MyDict<__Canon>for all reference type arguments ofMyDict<T>.
正确,尽管这是一个实现细节。
Yet, the values are stored separately.
“值”是指“每个构造类型的静态字段的值”。是的。
I guess that there is still some per-type-argument structure for each type argument
是的,数据必须去某个地方!
the vtable is linked to the JITted
MyDict<__Canon>, the fields are separate.
我不明白这句话是什么意思,所以我无法确认或否认它的正确性。
I also wonder whether there is a way to have per-object stores like that. I.e. not generic type + T, but object + T
澄清一下,您的问题是:有一些存储机制关联了一个通用类型 C<T>和给定的结构 C<Foo>给定静态字段 C<Foo> .我们可以将其视为一个查找,其中“键”是元组(C<T>、Foo、field),值是字段的值。是否有类似的存储机制,其中 key 是( C<T> , some arbitrary object , field )?
没有。如果需要,请自行构建。
关于c# - .Net 在哪里存储泛型类型的静态字段的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20613657/
作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss
是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串
我不确定传递给方法的对象的类型是否正确。我可能会将一个字符串传递给一个只能处理整数的函数。某种运行时保证怎么样?我看不到比以下更好的选择:defsomeFixNumMangler(input)raise"wrongtype:integerrequired"unlessinput.class==FixNumother_stuffend有更好的选择吗? 最佳答案 使用Kernel#Integer在使用之前转换输入的方法。当无法以任何合理的方式将输入转换为整数时,它将引发ArgumentError。defmy_method(number)
我有一个这样的哈希数组:[{:foo=>2,:date=>Sat,01Sep2014},{:foo2=>2,:date=>Sat,02Sep2014},{:foo3=>3,:date=>Sat,01Sep2014},{:foo4=>4,:date=>Sat,03Sep2014},{:foo5=>5,:date=>Sat,02Sep2014}]如果:date相同,我想合并哈希值。我对上面数组的期望是:[{:foo=>2,:foo3=>3,:date=>Sat,01Sep2014},{:foo2=>2,:foo5=>5:date=>Sat,02Sep2014},{:foo4=>4,:dat
我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr
我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案