草庐IT

Static-Stack-Usage-Analysis

全部标签

c++ - `static_cast<volatile void>` 对优化器意味着什么?

当人们试图在各种库中执行严格的基准测试时,我有时会看到这样的代码:autostd_start=std::chrono::steady_clock::now();for(inti=0;i这里使用volatile来防止优化器注意到被测代码的结果被丢弃,然后丢弃整个计算。当被测代码没有返回值时,说它是voiddo_something(int),然后有时我会看到这样的代码:autostd_start=std::chrono::steady_clock::now();for(inti=0;i(do_something(i+j));autostd_stop=std::chrono::steady_

c++ - 如何在c调用的matlab函数中使用 "global static"变量

您好,我目前正在使用MATLAB和C进行编码。我已使用MATLABCompiler将MATLAB函数编译到C共享库中。(mcc),并在C++程序中调用共享库中的函数。在C++中调用时,是否可以声明全局变量以在MATLAB函数之间共享数据?确切地说,如果matlab中有一个函数matlabA()和函数matlabB(),并使用mcc编译器编译成c++共享库为cppA()和cppB(),我可以通过在matlabA()和matlabB()?它似乎不起作用,那么我该如何在函数之间共享变量呢?谢谢!MATLABfunctionmatlabA()globalfoofoo=1;endfunction

c++ - "static_cast<To>(from)"当且仅当 "To to{from}"时,或者不是?

昨天在回答别人问题的过程中惊讶地发现gcc4.7.2包含特征模板std::is_explicitly_convertible,定义作为std::is_constructible_convertible的倒数:///is_explicitly_convertibletemplatestructis_explicitly_convertible:publicis_constructible{};搜索paper-trail,发现这个trait不应该有到过那里。bug有人提出反对将其包含在该版本的C++11标准库,它在gcc4.8.0中被删除。该错误报告指出std::is_explicitly

c++ - 如何在 for 循环中迭代 `std::stack` 个元素?

这个问题在这里已经有了答案:Doesstd::stackexposeiterators?(5个答案)关闭7年前。我正在编写一个FIR滤波器,它应该计算runningaverage输入序列的。classRunningAverager{public:RunningAverager(uint64_tFilterOrder){for(uint64_ti=0;i::const_referenceref=Registers.begin();ref!=Registers.end();???){//begin()andend()methodsdonotexistforstd::stack//Sum+=

c++ - 在可能的情况下扩展为 static_assert 的断言宏?

我有一些通用代码需要对成员函数的结果运行断言。此成员函数可能是constexpr,也可能不是。templatevoidfoo(Tt){assert(t.member_function()==10);}因为t.member_function()可能是一个常量表达式,我想知道是否可以将其视为static_assert这种情况,但在其他情况下默认为正常的assert。这可能吗? 最佳答案 这是一个有点疯狂的解决方案。取消注释Constc;foo(c);行,你会发现它无法编译。这是编译时断言。需要variablelengtharrays,也

c++ - inline static auto 的 Initializer "sizeof(T)"...是否需要实例化?

如果表达式的类型不相关,但我们用它来初始化静态自动变量,会发生什么?GCC和Clang的行为不同templatestructA{staticinlineautox=sizeof(T{}.f);};Aa;GCC不会引发错误。但是Clang认为这是无效的,因为它实例化了“sizeof”的操作数。GCC似乎跳过了该步骤,因为sizeof(T{}.f)始终具有类型size_t(不依赖于类型),因此它已经知道x没有实例化。如果我们引用x,例如(void)a.x;,两个编译器都会拒绝该程序。它甚至必须解析x的类型吗?如果我没记错的话,C++14以上的语言允许使用“占位符类型”保留事物(如函数)并进

c++ - 理解问题: Precompiled headers & include usage

我遇到了有关预编译header和#include指令的用法的理解问题。因此,我在这里得到了“stdafx.h”,并在其中包含了例如vector,iostream和string。显然,关联的“stdafx.cpp”仅包含“stdafx.h”。因此,如果我设计自己的头文件使用例如vector或iostream中的“代码”,则必须包含头文件,因为编译器当时不知道声明。那么,为什么这里的一些帖子(includestdafx.hinheaderorsourcefile?)说,即使其他文件包含所需的声明,例如在其他头文件中包含“stdafx.h”也不是一件好事。vector?因此,基本上没有关系直

c++ - "static initialization order fiasco"是 constexpr 变量的关注点吗?

如果我在一个翻译单元中用非默认值初始化一个constexpr变量foo然后初始化另一个constexpr变量bar和foo在另一个翻译单元中bar是否有可能在foo之前初始化导致bar由零或默认初始化的foo初始化。即,与非constexpr情况(静态初始化顺序惨败生效)不同,编译器和链接器会分析依赖顺序以保证正确的结果吗?此外,constexpr变量模板如何受到影响?它们的初始化顺序在单个翻译单元内未定义。首选C++17标准答案。更新:这是一个最小的例子。有用;那就是问题所在。在这一点上,我99%确定这是安全的TheStaticInitializationOrderFiasco(TS

c++ - 增加 Stack Size 的缺点以及 Stack Commit 和 Reserve 之间的区别

我最近遇到了DinkumwareC++11的堆栈溢出问题库,到目前为止,我已经通过将StackCommit和StackReserve大小加倍来解决这个问题(我还没有遇到任何问题)。但是,我很好奇增加堆栈大小是否有任何缺点,而且,我不完全确定StackCommit和StackReserve之间的区别是什么(但是堆栈提交要小得多比堆栈保留)。 最佳答案 增加堆栈大小的明显后果是更多的内存使用。由于在大多数情况下堆栈与总内存相比并不大,所以这不是大问题。显然,如果有许多线程每个都使用大堆栈,那么这可能会占用机器中的大量可用内存-特别是如果

c++ - 构造函数执行顺序/顺序 : dependent initialization of static variable (class instance) in a function

对于以下代码段:classBar{public:intx;inty;Bar(int_x,int_y){/*somecodeshere*/...}};classFoo{public:intx;inty;intz;Foo(Barb):x(b.x),y(b.y){z=someFunction(x,y);}};voidf(intx,inty){Barb(x,y);staticFoox(b);}intmain(){f(2,3);}在我看来,函数内的静态变量甚至应该在main()之前初始化。但是,Foo类型的静态变量x依赖于Bar类型的局部变量b。问题是:1)x的构造函数什么时候执行?即x是在第一