考虑以下程序:
struct ghost
{
// ghosts like to pretend that they don't exist
ghost* operator&() const volatile { return 0; }
};
int main()
{
ghost clyde;
ghost* clydes_address = &clyde; // darn; that's not clyde's address :'(
}
Run Code Online (Sandbox Code Playgroud)
我怎么得到clyde地址?
我正在寻找一种适用于所有类型对象的解决方案.C++ 03解决方案会很好,但我也对C++ 11解决方案感兴趣.如果可能,让我们避免任何特定于实现的行为.
我知道C++ 11的std::addressof函数模板,但我不想在这里使用它:我想了解标准库实现者如何实现这个函数模板.
我有一个类(A),它为其中一个字段使用堆内存分配.A类被实例化并作为指针字段存储在另一个类(B)中.
当我完成对象B时,我调用delete,我假设调用了析构函数...但是这也调用了A类中的析构函数吗?
从答案中,我接受了(请编辑,如果不正确):
class A B的实例调用B :: ~B();class Bdelete 应该显式地将delete所有堆分配的成员变量A;我理解gcc的--ffast-math标志可以大大提高浮动操作的速度,并超出IEEE标准,但我似乎无法找到有关它正在发生的事情的信息.任何人都可以解释一些细节,并可能给出一个明确的例子,说明如果标志开启或关闭会有什么变化?
我确实尝试过挖掘SO以寻找类似的问题,但却找不到任何解释ffast-math工作原理的东西.
我已经使用CUDA几周了,但我对块/ warps/thread的分配有些怀疑. 我从教学的角度(大学项目)研究建筑,所以达到最佳表现并不是我关注的问题.
首先,我想了解我是否直截了当地得到了这些事实:
程序员编写内核,并在线程块网格中组织其执行.
每个块都分配给一个流式多处理器(SM).一旦分配,它就无法迁移到另一个SM.
每个SM将其自己的块拆分为Warps(当前最大大小为32个线程).warp中的所有线程在SM的资源上并发执行.
线程的实际执行由SM中包含的CUDA核执行.线程和核心之间没有特定的映射.
如果warp包含20个线程,但目前只有16个可用核心,则warp将不会运行.
另一方面,如果一个块包含48个线程,它将被分成2个warp并且它们将并行执行,前提是有足够的内存可用.
如果线程在核心上启动,则它会因内存访问或长时间浮点操作而停止,其执行可以在不同的核心上恢复.
他们是对的吗?
现在,我有一个GeForce 560 Ti,因此根据规格,它配备了8个SM,每个包含48个CUDA核心(总共384个核心).
我的目标是确保架构的每个核心都执行相同的SAME指令.假设我的代码不需要比每个SM中可用的代码更多的寄存器,我想象了不同的方法:
我创建了8个块,每个48个线程,因此每个SM有1个块来执行.在这种情况下,48个线程将在SM中并行执行(利用它们可用的所有48个内核)?
如果我推出64个6个线程的块,有什么区别吗?(假设它们将在SM之间平均映射)
如果我在预定的工作中"淹没"GPU(例如,创建每个1024个线程的1024个块),可以合理地假设所有核心将在某个点使用,并且将执行相同的计算(假设线程永远不会失速)?
有没有办法使用Profiler检查这些情况?
这个东西有没有参考?我阅读了"编程大规模并行处理器"和"CUDA应用程序设计与开发"中的CUDA编程指南和专用于硬件架构的章节; 但我无法得到准确的答案.
未命名的命名空间如何优于static关键字?
我们的想法是通过只编写.cpp文件退出当前的.h/.cpp系统,然后在编译过程中生成模块文件,然后由其他.cpp文件使用.
这看起来非常棒.
但我的问题是:为什么他们从C++ 0x删除它?是因为太多的技术难题?时间不够?你是否认为他们会考虑使用它来获得一个不可思议的C++版本?
我在标准文档中找不到答案.C++语言标准是否要求sizeof(bool)始终为1(1个字节),还是要定义此大小的实现?
(我正在寻找一两个例子来证明这一点,而不是一个列表。)
C++ 标准的变化(例如从 98 到 11、11 到 14 等)是否曾经改变了现有的、格式良好的、定义好的用户代码的行为——默默地?即在使用较新的标准版本进行编译时没有警告或错误?
笔记:
#if __cplusplus >= 201103L.有什么办法可以从查询中获取实际的行号吗?
我希望能够通过名为score的字段订购名为league_girl的表格; 并返回该用户名的用户名和实际行位置.
我想对用户进行排名,以便我可以分辨出特定用户的位置,即.乔是200中的第100位,即
User Score Row
Joe 100 1
Bob 50 2
Bill 10 3
Run Code Online (Sandbox Code Playgroud)
我在这里看到了一些解决方案,但我已经尝试了大部分解决方案,但实际上没有一个返回行号.
我试过这个:
SELECT position, username, score
FROM (SELECT @row := @row + 1 AS position, username, score
FROM league_girl GROUP BY username ORDER BY score DESC)
Run Code Online (Sandbox Code Playgroud)
如派生的
...但它似乎没有返回行位置.
有任何想法吗?
c++ ×7
c++11 ×2
base-class ×1
boolean ×1
cuda ×1
destructor ×1
fast-math ×1
gcc ×1
gpgpu ×1
implementation-defined-behavior ×1
indexing ×1
math ×1
module ×1
mysql ×1
namespaces ×1
nvidia ×1
performance ×1
sizeof ×1
standards ×1
static ×1
stl ×1