小编mos*_*a88的帖子

constexpr函数在编译时不计算值

我想比较元编程和c ++ 0x中constexpr的使用.然后我在两个模型中写了一个fib函数.当我使用元编程模型时,答案打印速度非常快,因为它是在编译时计算的.但是当我使用constexpr函数时,它会在运行时计算值,而不是在编译时.我使用g ++(gcc)4.8.可以帮助我吗?

#include <iostream>
using namespace std;
#define NUM 42

template <unsigned int N>
struct Fibonacci {
    enum { value = Fibonacci<N - 1>::value + Fibonacci<N - 2>::value };
};

template <>
struct Fibonacci<1> {
    enum { value = 1 };
};

template <>
struct Fibonacci<0> {
    enum { value = 1 };
};

constexpr unsigned int fib(unsigned int n)
{
    return (n > 1 ? fib(n-1) + fib(n-2) : 1 );
}

int main()
{

    cout << …
Run Code Online (Sandbox Code Playgroud)

c++ compile-time template-meta-programming c++11 gcc4.8

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

使用VirtualAllocEX时出错代码487(ERROR_INVALID_ADDRESS)

我正在尝试使用VirtualAllocEx().当我将dwSize(第三个参数)设置为大于约63 MB的数字时,它会导致在我查看时生成错误代码487 GetLastError().但是,它适用于较小的尺寸,如4MB.

这是我的代码的一部分:

VirtualAllocEx(peProcessInformation.hProcess,
               (LPVOID)(INH.OptionalHeader.ImageBase),
               dwImageSize, 
               MEM_RESERVE | MEM_COMMIT,
               PAGE_EXECUTE_READWRITE);
Run Code Online (Sandbox Code Playgroud)

在我使用4MB EXE文件的情况下,LPVOID返回值是0x00400000,但在其他情况下(20MB或更大的文件)它返回0x00000000.

  1. 参数是否有最大值dwSize

  2. 我的问题是否有其他解决方案,例如另一个功能?

winapi memory-management error-code

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