草庐IT

hidden_size

全部标签

c++ - 那里有 "function size profiler"吗?

在从事C++项目三年后,可执行文件已增长到4MB。我想看看所有这些空间的去向。有没有工具可以报告最大的太空pig是什么?很高兴看到按类(类中的所有函数)、按模板(所有实例化)和按库(有多少属于C标准库和STL?exe中的每个库有多少?)编辑:注意,我在Windows上使用VisualC++。 最佳答案 在Linux中,您可以使用nm显示可执行文件中的所有符号并按大小倒序排序:$nm-CSr--size-sort选项:-C对C++名称进行解码。-S显示符号的大小。--size-sort按大小对符号进行排序。-r反转排序。如果你想获得每

C++ vector max_size();

在32位系统上。std::vector::max_size()返回232-1,大小为char—1个字节std::vector::max_size()返回230-1,大小为int—4字节std::vector::max_size()返回229-1,大小为double—8字节谁能告诉我max_size()取决于什么?max_size()的返回值是多少?如果它在64位系统上运行。 最佳答案 max_size()是理论上可以放入vector中的最大项目数。在32位系统上,理论上您可以分配4Gb==2^32,即2^32char值、2^30in

c++ - c++ size_t在linux中定义在哪里

现在我正在谈论程序员使用typedef关键字定义的新类型。只要我的学生习惯了size_t类型(例如通过使用函数length()),我不得不让他们稍微努力“相信”它是一个整数类型,我认为它会很棒向他们展示这种类型的定义位置。所以,我在Ubuntu机器中的/usr/include中做了很多grep,我看到size_t是size_type的重新定义,而size_type又是metadata_type的重新定义,这就是在这个目录下结束。没有找到最终的“typedefunsignedintmetadata_type;”。在/usr/src中,我发现了另一个名为yy_size_t的先前类型,...

c++ - 使用 clang++、-fvisibility=hidden、typeinfo 和 type-erasure

这是我在MacOSX上使用clang++时遇到的问题的缩小版本。经过认真编辑,以更好地反射(reflect)真正的问题(描述问题的第一次尝试没有表现出问题)。失败我有一个C++软件,在目标文件中有大量符号,所以我使用-fvisibility=hidden保持我的符号表很小。众所周知,在这种情况下,必须特别注意vtables,我想我面临这个问题。但是,我不知道如何以一种让gcc和clang都满意的方式优雅地解决它。考虑base具有向下转换运算符的类,as,和derived类模板,其中包含一些有效负载。对base/derived用于实现类型删除://foo.hh#defineAPI__at

c++ - 为什么在 Mac OS X 上使用 size_t 时 uint32_t 和 uint64_t 之间存在歧义?

考虑以下示例代码:#include#includeusingnamespacestd;intf(uint32_ti){return1;}intf(uint64_ti){return2;}intmain(){cout这在MacOSX上失败:$g++--versioni686-apple-darwin10-g++-4.2.1(GCC)4.2.1(AppleInc.build5664)$maketestg++test.cc-otesttest.cc:Infunction'intmain()':test.cc:23:error:callofoverloaded'f(size_t&)'isamb

c++ - 如何编写适用于任何类型集合对象的 size() 函数?

我需要一种简单的方法来获取T类对象的计数/长度/大小在哪里T是某种集合类型,例如std::map,std::list,std::vector,CStringArray,CString,std::string,……对于大多数标准类型,T::size()是正确答案,对于大多数MFC类T::GetSize()是正确的,对于CString,是T::GetLength().我想点个赞:templateautosize(constT&t)...计算出正确的成员函数调用。似乎应该有一种简单的方法来调用T上的特征模板其中有一个size(constT&t)成员,它本身使用SFINAE存在或不存在,如果存

c++ - 为什么 std::array::size constexpr 具有简单类型(int,double,...)而不是 std::vector (GCC)?

以下代码:std::arrayarr1;std::arrayarr2;...用gcc和clang编译因为std::array::size被认为是constexpr。但以下内容不能用gcc(版本5.3.020151204)编译:std::array,4>arr1;std::array,arr1.size()>arr2;对我来说,如果第一个代码有效,则没有理由编译失败,但由于我没有找到很多关于此的帖子,我不知道它是否是gcc错误或clang扩展?gcc的错误(我不太明白...):main.cpp:Infunction'intmain()':main.cpp:6:46:error:callt

c++ - sizeof(size_t) == sizeof(void*) 总是正确的吗?

C99/C++11标准是否保证sizeof(size_t)==sizeof(void*)总是正确的?size_tf(void*p){return(size_t)(p);//Isitsafe?}void*f(size_tn){return(void*)(n);//Isitsafe?} 最佳答案 不,不能保证。使用intptr_t或uintptr_t将指针安全地存储在整数中。存在/曾经是错误的架构是有意义的,例如分段DOS内存模型。那里的内存是由64k段构成的——一个对象永远不会大于一个段,所以16位size_t就足够了。但是,指针具有

c++ - C++/编译: is it possible to set the size of the vptr (global vtable + 2 bytes index)

我最近发布了一个有关由于C++中的虚拟性而导致的内存开销的问题。答案使我了解了vtable和vptr的工作原理。我的问题如下:我在super计算机上工作,我有数十亿个对象,因此,由于虚拟性,我必须关心内存开销。经过一些措施,当我将类与虚函数一起使用时,每个派生对象都有其8字节的vptr。这一点一点都不能忽略。我不知道英特尔icpc或g++是否具有某些配置/选项/参数,以使用精度可调的“全局”vtable和索引而不是vptr。因为这样可以让我为2亿个对象使用2字节的索引(无符号shortint)而不是8字节的vptr(这样可以大大减少内存开销)。有没有办法用编译选项来做到这一点(或类似的

c# - 编码 SIZE_T* 的正确方法?

我有以下C++函数定义,我试图通过PInvoke从托管代码中调用它:boolFooBar(SIZE_T*arg1);我的托管声明如下所示:[DllImport("mydll",SetLastError=true,CharSet=CharSet.Unicode)]privatestaticexternboolFooBar(refuintarg1);你们中的一些人可能会注意到我最终遇到的相同错误。这不是64位可移植的。SIZE_T的大小可变(32-64位),指向它的指针也是如此。在托管大小上,指针正确转换为64位,但uint没有,您最终可能会在arg1的高位中出现垃圾。这是一个特别持久的错