小编Dev*_*lus的帖子

"rep ret"是什么意思?

我在Visual Studio 2008上测试了一些代码并注意到了security_cookie.我能理解它的重点,但我不明白这条指令的目的是什么.

    rep ret /* REP to avoid AMD branch prediction penalty */
Run Code Online (Sandbox Code Playgroud)

当然我可以理解评论:)但是这个前缀exaclty在上下文中做了ret什么,如果ecx是!= 0 会发生什么?显然,ecx当我调试它时,忽略循环计数,这是预期的.

我发现这里的代码在这里(由编译器注入安全性):

void __declspec(naked) __fastcall __security_check_cookie(UINT_PTR cookie)
{
    /* x86 version written in asm to preserve all regs */
    __asm {
        cmp ecx, __security_cookie
        jne failure
        rep ret /* REP to avoid AMD branch prediction penalty */
failure:
        jmp __report_gsfailure
    }
}
Run Code Online (Sandbox Code Playgroud)

x86 assembly

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

为什么std :: string没有保留构造函数?

有几个构造std::string.我正在寻找一种避免重新分配的方法,我很惊讶有一个填充构造函数,但没有"保留"构造函数.

 std::string (size_t n, char c);
Run Code Online (Sandbox Code Playgroud)

但不是

 std::string (size_t n);
Run Code Online (Sandbox Code Playgroud)

所以我必须reserve()在它已经分配了默认值(在我的情况下是16个字节)之后调用,只是为了立即重新分配它?

有没有这样的构造函数在创建对象时直接保留空间的原因,而不是必须手动执行?或者我错过了什么,有一些方法可以做到这一点?

使用fill构造函数是浪费时间,因为它将遍历内存只是为了被覆盖,并且还会导致错误的大小,因为s.length()报告N而不是0.

c++ string

27
推荐指数
1
解决办法
4769
查看次数

如何在Windows中使QLineEdit无法编辑

我正在使用Qt 5.2,我想做一个QLineEdit不可编辑的.这个问题是它看起来不像.使用setReadOnly(true)时保持白色背景,看起来仍然可以编辑.

如果我禁用它,它会变成灰色,文本也会变浅.问题是,在禁用状态下无法复制文本.

那么我怎样才能使一个QLineEdit正确的不可编辑,并使它看起来像它.在Windows中,这样的控件通常是灰色的,但文本保持黑色.当然我可以手动设置样式,但这意味着它是硬编码的,在其他平台上可能看起来不对.

c++ qt readonly qlineedit

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

-fPIC被目标忽略(所有代码都与位置无关),无用的警告

当我编译我的库时,我已经开启了,-fPIC因为我希望能够将其编译为共享库,但也可以作为静态编译.

在cygwin上使用gcc 3.4.4我在所有源文件上收到此警告:

-fPIC ignored for target (all code is position independent)
Run Code Online (Sandbox Code Playgroud)

而且我真的很想知道它有什么意义.它告诉我,我使用的开关没有效果,因为开关应该已经完成​​了.嗯,这意味着它是多余的,很好.但它有什么意义呢?我该如何压制它呢?

我不是在谈论为什么使用PIC,而是为什么它会产生IMO无用的警告.

c c++ gcc-warning

12
推荐指数
1
解决办法
5148
查看次数

Valgrind C++内存在空文件中泄漏

我在valgrind中遇到"额外"内存泄漏问题.例如,我创建了一个名为temp.cpp的测试程序:

int main() { return 0; }
Run Code Online (Sandbox Code Playgroud)

在终端,我运行:

>> g++ -o temp.out temp.cpp
>> valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all ./temp.out
Run Code Online (Sandbox Code Playgroud)

这会导致几次内存泄漏.怎么会这样?

==4438== LEAK SUMMARY:
==4438==    definitely lost: 4,120 bytes in 2 blocks
==4438==    indirectly lost: 2,288 bytes in 6 blocks
==4438==      possibly lost: 8,336 bytes in 99 blocks
==4438==    still reachable: 6,440 bytes in 13 blocks  
==4438==         suppressed: 5,020 bytes in 73 blocks
Run Code Online (Sandbox Code Playgroud)

我试过运行其他.cpp文件,我得到完全相同的泄漏摘要.大约一个月前,当我尝试时,没有错.我可能已经升级了Xcode或其他东西,如果这可能是问题(?).这些是我对g ++的设置:

配置为:

--prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/c++/4.2.1
Run Code Online (Sandbox Code Playgroud)

Apple LLVM版本6.1.0(clang-602.0.53)(基于LLVM 3.6.0svn)目标:x86_64-apple-darwin15.0.0线程模型:posix

c++ macos xcode valgrind

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

cygwin g ++ Linker找不到共享库

我一直在创建一个库.当我将其编译为静态库时,它工作正常.现在我想把它变成一个共享库.库是在适当的位置创建的,但是当我尝试编译客户端代码时,链接阶段说它找不到库.

我已经尝试将其重命名为al或dylib,但这也无济于事.当我在链接上放置-v标志时,我可以看到我的库路径在那里.我也试过不同的路径.我使用了相对路径,但即使是完整路径,它也找不到它.

库中的Makefile:

.SUFFIXES:
.SUFFIXES: .o .cpp
.SUFFIXES: .o .d

CC := g++
LNK:= g++

CXXFLAGS_RELEASE    = -fPIC -shared -O2 -Wall -fmessage-length=0
CXXFLAGS_DEBUG      = -fPIC -shared -g -Wall -fmessage-length=0 -D _DEBUG

CXXFLAGS =  $(CXXFLAGS_DEBUG)

OBJDIR:=        obj
SRCDIR:=        src
HDIR:=          include

INCLUDE_PATHS:= -Iinclude -Iinclude/interfaces -Iinclude/support

CPP_FILES := propertyfile/propertyfile.cpp \
            propertyfile/propertyitem.cpp \
            propertyfile/propertyfactory.cpp \
            helper/string_helper.cpp

OBJ :=      $(patsubst %.cpp,$(OBJDIR)/%.o, $(CPP_FILES))
SRC :=      $(patsubst %.cpp,$(SRCDIR)/%.o, $(CPP_FILES))

LIBS:=      

TARGET:=    libsupport.so

all:    $(TARGET)

$(TARGET):  $(OBJ)
    $(LNK) -o $(TARGET) $(OBJ) -shared  
    @cp $(TARGET) ../lib
    @cp -r …
Run Code Online (Sandbox Code Playgroud)

c++ shared

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

C#将不同版本的程序集加载到同一项目中

我正在创建一些工具,执行NUnit等多个操作.在这个工具里面,我打开.dll程序集并调用方法形成它来运行一些测试.

一切都好,直到我需要重新加载.dll,程序重启.我们的想法是,当工具运行时,我们将所需的程序集复制到一些临时文件夹并从那里调用.如果我需要重新加载,我将另一个复制到另一个临时文件夹,并尝试从另一个文件夹加载新复制并加载到以前的程序集对象

  ExecutingAssembly = Assembly.LoadFrom(AssemblyFullPath); 
Run Code Online (Sandbox Code Playgroud)

但我的问题是,在我将AssemblyFullPath更改为新的并调用Assembly.LoadFrom之后,它只返回刚装入的第一次加载而不是第二次加载!也许问题是我们无法加载具有不同版本的多个程序集?解决办法是什么?

.net c# reflection version .net-assembly

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

在Windows上使用Qt5进行奇怪的延迟绘画

我在Windows中使用Qt5.我刚在Qt Creator中创建了一个简单的小小部件项目.我有一个QMainWindow文本编辑小部件.我启用了垂直布局,因此文本编辑会消耗主窗口内部的全部大小(这就是我想要的,我正在尝试创建一个小的记事本应用程序).

当我在预览期间拖动主窗口的右下角时(我单击左下角的绿色三角形)我看到子窗口小部件调整大小有点延迟.它没有完全调整与同一渲染帧上的父窗口(似乎后面有1-2个渲染帧).

我记得几年前在旧学校的Win32 API中处理渲染延迟.我记得我必须对屏幕外的位图进行双缓冲渲染才能修复它(或者沿着那些线进行修复;已经很长时间了).

有没有办法在Qt中修复这个"渲染延迟"?我只能想象这是Windows特有的,可能不会影响其他平台,虽然我还没有测试过.如果我需要提供更多信息,请告诉我.

c++ qt qt-creator qt5

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

onCreate vs. onResume/onRestart bevhaviour关于成员变量

当我打开一个活动时,我知道我可以在onCreate函数中初始化东西.

但是OnResume和onRestart函数的行为是什么?这些函数何时被调用?

具体来说:我在onCreate函数中初始化一个本地成员变量auiqring对全局对象的引用.现在,当用户被中断时,例如通过呼叫,可以关闭活动.之后,当用户回到我的视图时,已经初始化的变量的状态是什么?我是否必须重新初始化onResume/onRestart函数中的所有内容?那么与onCreate相反的功能差异是什么?

resume android restart android-activity

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

为什么我必须在这里清除std :: stringstream?

我写了一个简短的测试程序,看看我是否可以反复使用stringstream附加到字符串.

在第一个版本中,我得到了Output1,我真的不明白为什么s1保持为空.我发现我必须做ss.clear()然后在Output2中获得预期的结果.任何人都可以解释为什么没有明确的它不起作用?我本以为,如果我反复输入数字并将它们取回一个字符串,我应该总是得到数字.我不确定该数字是否被附加,但这不是这个例子的重点.

这里:http://www.cplusplus.com/reference/sstream/stringstream/它说我可以使用任何操作,没有限制或要求重置字符串,我可以看到.我也不明白为什么之后我得到没有ss.clear()的输出.

此外,我有点惊讶s0后来保持不变.因此,如果字符串已经包含内容,则流不会覆盖或重置字符串?

我正在使用gcc 3.4.4和cygwin.

int main()
{
    std::string s0;
    std::string s1;
    int n = 1;
    std::stringstream ss;
    ss << n;
    ss >> s0;
    cout << "S0:" << s0 << endl;
    ss.clear();     <-- If I remove this, then s1 stays empty.
    n = 2;
    ss << n;
    ss >> s1;
    cout << "S1:" << s1 << endl;
    ss << n;
    ss >> s0;
    cout << "S0_2:" << s0 << endl;    <-- Why is s0 still …
Run Code Online (Sandbox Code Playgroud)

c++ std stringstream

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