假设我有一个带有一些成员变量且没有虚函数的基类:
class Base {
int member;
};
Run Code Online (Sandbox Code Playgroud)
以及从非虚拟方式派生Base并且没有新成员变量的派生类,再次没有虚函数:
class Derived : Base {
};
Run Code Online (Sandbox Code Playgroud)
显然sizeof(Derived)不能小于sizeof(Base).
被sizeof(Derived)要求等于sizeof(Base)?
在x86上有两种众所周知的方法可以将整数寄存器设置为零值.
或
mov reg, 0
Run Code Online (Sandbox Code Playgroud)
要么
xor reg, reg
Run Code Online (Sandbox Code Playgroud)
有一种观点认为第二种变体更好,因为值0没有存储在代码中并且节省了几个字节的生成的机器代码.这绝对是好的 - 使用较少的指令缓存,这有时可以实现更快的代码执行.许多编译器生成这样的代码.
然而,在xor指令和改变相同寄存器的早期指令之间正式存在指令间依赖性.由于存在依赖性,后一条指令需要等到前者完成,这可能会减少处理器单元的负载并损害性能.
add reg, 17
;do something else with reg here
xor reg, reg
Run Code Online (Sandbox Code Playgroud)
很明显,无论初始寄存器值如何,xor的结果都将完全相同.但是处理器能够识别出这个吗?
我在VC++ 7中尝试了以下测试:
const int Count = 10 * 1000 * 1000 * 1000;
int _tmain(int argc, _TCHAR* argv[])
{
int i;
DWORD start = GetTickCount();
for( i = 0; i < Count ; i++ ) {
__asm {
mov eax, 10
xor eax, eax
};
}
DWORD diff = GetTickCount() - start;
start = …Run Code Online (Sandbox Code Playgroud) 我有一个视图,其中包含我的网站条款和条件的单选按钮列表.
例如
Yes
@Html.RadioButtonFor(model => model.TermsAndConditions, "True")
No
@Html.RadioButtonFor(model => model.TermsAndConditions, "False",
new { Checked = "checked" })
</div>
@Html.ValidationStyledMessageFor(model => model.TermsAndConditions)
Run Code Online (Sandbox Code Playgroud)
如果用户完成表单没有任何错误,一切正常,但如果我进行服务器端验证并刷新页面,则会丢失用户为单选按钮做出的选择,并且选定的无线电将返回到默认的假字段.
我是如何绑定radiobutton所以如果用户选择为true,即使在服务器端验证之后,该值仍然保持不变?
任何建议都会很棒!
如果我的应用程序有太多静态变量或方法,那么根据定义,它们将存储在堆中.如果我错了,请纠正我
1)在应用程序关闭之前,这些变量是否会在堆上?
2)他们可以随时使用GC吗?如果没有,我可以说它是内存泄漏?
我需要逐个像素地绘制图像并将其显示在WPF中.我试图通过使用System.Drawing.Bitmap然后使用CreateBitmapSourceFromHBitmap()创建BitmapSource一个WPF图像控件来做到这一点.我在某处有内存泄漏,因为当CreateBitmapSourceFromBitmap()重复调用时,内存使用率会上升,并且在应用程序结束之前不会下降.如果我不打电话CreateBitmapSourceFromBitmap(),内存使用量没有明显变化.
for (int i = 0; i < 100; i++)
{
var bmp = new System.Drawing.Bitmap(1000, 1000);
var source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
bmp.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty,
System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
source = null;
bmp.Dispose();
bmp = null;
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能释放BitmapSource记忆?
我创建了一个Azure存储帐户.我有一个400兆字节的.zip文件,我想将其放入blob存储空间供以后使用.
如果不编写代码,我怎么能这样做呢?那有什么接口吗?
我有一个C库,需要注册回调函数来定制一些处理.回调函数的类型是int a(int *, int *).
我正在编写类似于以下内容的C++代码,并尝试将C++类函数注册为回调函数:
class A {
public:
A();
~A();
int e(int *k, int *j);
};
A::A()
{
register_with_library(e)
}
int
A::e(int *k, int *e)
{
return 0;
}
A::~A()
{
}
Run Code Online (Sandbox Code Playgroud)
编译器抛出以下错误:
In constructor 'A::A()',
error:
argument of type ‘int (A::)(int*, int*)’ does not match ‘int (*)(int*, int*)’.
Run Code Online (Sandbox Code Playgroud)
我的问题:
当我用VC++ 10编译这段代码时:
DWORD ran = rand();
return ran / 4096;
Run Code Online (Sandbox Code Playgroud)
我得到这个反汇编:
299: {
300: DWORD ran = rand();
00403940 call dword ptr [__imp__rand (4050C0h)]
301: return ran / 4096;
00403946 shr eax,0Ch
302: }
00403949 ret
Run Code Online (Sandbox Code Playgroud)
这是一个干净,简洁,用一个逻辑右移的2的幂代替一个除法.
然而,当我编译这段代码时:
int ran = rand();
return ran / 4096;
Run Code Online (Sandbox Code Playgroud)
我得到这个反汇编:
299: {
300: int ran = rand();
00403940 call dword ptr [__imp__rand (4050C0h)]
301: return ran / 4096;
00403946 cdq
00403947 and edx,0FFFh
0040394D add eax,edx
0040394F sar eax,0Ch
302: }
00403952 ret …Run Code Online (Sandbox Code Playgroud) 在用户GMan使用此答案时,我制作了以下代码段(使用Visual C++ 9编译):
class Class {
public:
operator void() {}
};
Class object;
static_cast<void>( object );
(void)object;
object.operator void();
Run Code Online (Sandbox Code Playgroud)
在使用调试器踩到后,我发现转换为void不调用Class::operator void(),只有第三个invokation(显式调用运算符)实际上调用了运算符,两个转换只是什么都不做.
为什么operator void不使用强制语法调用?
我正在尝试将X-Frame-Options标头(值设置为"DENY")添加到我的MVC 4应用程序中.我环顾四周,似乎这是为所有页面添加最干净的方式.
但是,当我添加此代码时,它将无法构建.有错误OnResultExecuting的
"找不到合适的方法来覆盖."
public class XframeOptions : ActionFilterAttribute
{
public override void OnResultExecuting(
System.Web.Mvc.ResultExecutingContext filterContext)
{
filterContext.HttpContext.Response.AddHeader(
"X-Frame-Options", "DENY");
}
}
Run Code Online (Sandbox Code Playgroud)
如果这是最干净的方法,我该如何解决此错误?有没有更好的方法来处理MVC 4应用程序?
c++ ×4
assembly ×2
c# ×2
memory-leaks ×2
x86 ×2
.net ×1
asp.net-mvc ×1
azure ×1
c ×1
callback ×1
casting ×1
division ×1
http-headers ×1
inheritance ×1
interop ×1
java ×1
operators ×1
sizeof ×1
visual-c++ ×1
windows ×1
wpf ×1