小编Ben*_*tto的帖子

忽略参数的 consteval lambda 无法编译

我有一个 lambda 忽略其int参数并始终返回一个常量。如果我标记它consteval,编译就会失败,因为。编译器抱怨使用consteval非常量参数调用 lambda。但是参数与 lambda 有什么关系呢?

来自编译器资源管理器

来源:3:16:错误:“i”的值在常量表达式中不可用 5 | 拉姆达(i);

void bar (auto lambda, int start, int end) {
    for (int i=start; i<end; ++i) {
        lambda(i);
    }
}

int main( )
{
    auto foo = [] (int) consteval { return 2;};

    bar(foo, 1, 9);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ lambda language-lawyer c++20 consteval

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

为什么malloc/new会捕获callstack?

我有一个64位应用程序,在Server 2003下作为服务运行.

当我连接VS Profiler或windbg时,我看到很多像下面那样的callstack.我知道在调试器(或分析器)中产生的进程使用调试堆等...但事实并非如此,因为该服务是由OS启动的,我只附加到它.

我不明白它为什么要展开堆栈.分析器显示花费了大量时间.更多信息:

•这些是使用vc9构建的发行版,在Server 2003上运行.

•系统环境变量_NO_DEBUG_HEAP设置为1.

•我正在使用Microsoft符号服务器.

为什么要捕获堆栈跟踪?它似乎正在记录它...但我无法找到它.

我的目标是验证应用程序是否真正展开堆栈,如果确实如此,请尽量避免使用它.

有任何想法吗?


调用堆栈

ntdll!RtlVirtualUnwind
ntdll!RtlpWalkFrameChain
ntdll!RtlCaptureStackBackTrace
ntdll!RtlpCaptureStackTraceForLogging
ntdll!RtlLogStackBackTrace
ntdll!RtlDebugAllocateHeap
ntdll!RtlAllocateHeapSlowly
ntdll!RtlAllocateHeap
MSVCR90!malloc
MSVCR90!operator new
Run Code Online (Sandbox Code Playgroud)

c++ windows callstack heap-memory stack-unwinding

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