小编sha*_*oth的帖子

如果没有新的成员变量与基类相比,C++是否允许增加派生类的大小?

假设我有一个带有一些成员变量且没有虚函数的基类:

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)

c++ inheritance sizeof language-lawyer

50
推荐指数
3
解决办法
2299
查看次数

使用xor reg,reg是否优于mov reg,0?

在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)

x86 assembly micro-optimization

48
推荐指数
4
解决办法
1万
查看次数

将mvc3 radiobutton绑定到模型的正确方法

我有一个视图,其中包含我的网站条款和条件的单选按钮列表.

例如

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,即使在服务器端验证之后,该值仍然保持不变?

任何建议都会很棒!

asp.net-mvc-3

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

可以使用太多静态变量导致Java中的内存泄漏吗?

如果我的应用程序有太多静态变量或方法,那么根据定义,它们将存储在堆中.如果我错了,请纠正我

1)在应用程序关闭之前,这些变量是否会在堆上?
2)他们可以随时使用GC吗?如果没有,我可以说它是内存泄漏?

java memory-leaks memory-management

46
推荐指数
1
解决办法
3万
查看次数

WPF CreateBitmapSourceFromHBitmap()内存泄漏

我需要逐个像素地绘制图像并将其显示在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记忆?

.net c# wpf memory-leaks

46
推荐指数
3
解决办法
3万
查看次数

如何在不编写自己的程序的情况下将一些文件上传到Azure blob存储中?

我创建了一个Azure存储帐户.我有一个400兆字节的.zip文件,我想将其放入blob存储空间供以后使用.

如果不编写代码,我怎么能这样做呢?那有什么接口吗?

windows azure azure-storage azure-storage-blobs

46
推荐指数
5
解决办法
4万
查看次数

使用C++类成员函数作为C回调函数

我有一个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)

我的问题:

  1. 首先是可以注册一个C++类的memeber函数,就像我想要做的那样,如果是这样的话怎么样?(我在http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html上阅读了32.8 .但在我看来它并没有解决问题)
  2. 是否有替代/更好的方法来解决这个问题?

c c++ interop callback

45
推荐指数
4
解决办法
5万
查看次数

为什么发出这样复杂的代码来将有符号整数除以2的幂?

当我用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)

c++ x86 assembly division visual-c++

44
推荐指数
3
解决办法
3147
查看次数

为什么使用强制语法不调用"operator void"?

用户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不使用强制语法调用?

c++ casting operator-overloading operators

40
推荐指数
1
解决办法
2700
查看次数

将X-Frame-Options标头添加到MVC 4应用程序中的所有页面

我正在尝试将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# asp.net-mvc http-headers x-frame-options asp.net-mvc-4

40
推荐指数
3
解决办法
4万
查看次数