草庐IT

min-block-size

全部标签

c++ - C/C++ : size of a typedef struct containing an int and enum == sizeof(int)?

我在我的Ubuntu(i686)上使用gcc版本4.3.3。我写了一个精简的测试程序来描述我缺乏理解和我的问题。该程序应告诉我我实现的结构的大小。所以我有一个typedefstruct用于Message和一个小的main来玩:#includetypedefstruct{intsize;enum{token=0x123456};}Message;intmain(intargc,char*argv[]){Messagem;m.size=30;printf("sizeof(int):%d\n",sizeof(int));printf("sizeof(0x123456):%d\n",sizeo

c++ - "Efficiency"作为参数传递 size_t

由于size_t可以是32位或64位,具体取决于当前系统,是否最好始终将size_t作为引用或const引用传递给函数,以便它始终为4字节?(如果它是8字节,则必须复制一份)我看过的许多开源代码都不会这样做,但是如果他们的编译器支持64位整数,那么这些64位整数总是作为引用传递。他们为什么不为size_t这样做?我想知道你有什么看法。 最佳答案 通常按值传递所有原始类型,因为复制它们所需的操作通常只是一条汇编指令。因此,按值传递size_t优于按引用传递size_t。 关于c++-"Ef

c++ - 跳出 try block 是否合法?

我有一些代码是从一个非常聪明的人那里继承的,他们喜欢使用gotos离开tryblock,完全绕过catchblock。它绝对有效,我怀疑这是合法的(我认为C++标准规定在退出作用域时,所有内容都会被正确清理,我假设这适用于编译器为实现异常而必须做的任何事情我的平台)。这真的合法吗?这不是我写过的东西(它太聪明了一半),但它显然有效,我只是想了解为什么这样可以。 最佳答案 它可以是合法的,这取决于代码的作用。比如我写过一个catchblock跳出的代码,用在一个语言的runtime库中(为简单起见,使用runtime库的代码并没有实现

c++ - 为什么 std::vector max_size() 函数会返回 -1?

我有一个std::vectorm_vData;m_vData.max_size()总是返回-1。为什么会这样? 最佳答案 可能是因为您在查看之前将其分配给签名类型。max_size的返回值通常是size_t,这是一个无符号类型。在许多平台上直接转换为int将返回-1。试试下面的方法std::vector::size_typev1=myVector.max_size(); 关于c++-为什么std::vectormax_size()函数会返回-1?,我们在StackOverflow上找到一

c++ - 处理导致性能问题的双端队列 block 大小

任何在性能关键代码中使用过“双端队列”的人可能已经注意到(至少在VS2010附带的STL中)block大小为16字节。这是VS2010附带的头文件的实际片段:#define_DEQUESIZ(sizeof(value_type)这不是新信息,请参阅Aboutdeque'sextraindirection有关此声明为何导致性能问题的更多详细信息。我想在各种算法中使用双端队列,但如果我受限于此实现则不会。规避此问题的最佳方法是什么?1)使用另一个没有这个问题的容器。如果是这样,谁能给我指一个没有GNU许可限制的软件?2)创建一个新的容器类来解决这个限制。这个新的容器类不会成为std命名空间

c++ - OpenSSL:AES CCM 256 位大文件加密 block :这可能吗?

我正在执行一项使用AESCCM模式(256位key长度)加密大文件的任务。其他用于加密的参数是:标签大小:8字节iv大小:12字节因为我们已经在使用OpenSSL1.0.1c,所以我也想用它来完成这项任务。文件的大小事先并不知道,它们可能非常大。这就是为什么我想按block读取它们并使用EVP_EncryptUpdate单独加密每个block,直到文件大小。不幸的是,仅当整个文件一次加密时,加密对我有效。如果我尝试多次调用它,我会从EVP_EncryptUpdate或奇怪的崩溃中得到错误。我使用gcc4.7.2在Windows7和UbuntuLinux上测试了加密。我找不到有关Open

c++ - 具有 "blocking"pop 的单一生产者单一消费者队列

我正在寻找具有“阻塞”流行音乐的单一生产者单一消费者队列。升压spsc_queue几乎没问题,除了一种方法:boolpop(T&ret);Popsoneobjectfromringbuffer.该方法是“非阻塞的”,如果没有数据则立即返回。我希望此方法“阻塞”并等待一些数据到达。我应该使用哪些集合?upd至少有人可以建议任何带有阻塞pop的c++队列吗? 最佳答案 并发队列很少提供弹出阻塞接口(interface):在许多情况下,用户应该执行阻塞逻辑,避免队列实现的不必要开销。也就是说,您可以在queue::pop周围添加一个包装器

c++ - 将#include 包装在命名空间 block 中是个好主意吗?

我有一个C头文件,它被编写为编译为C和C++(它只使用公共(public)子集中的特性,并使用extern"C"东西)。问题是,该header在全局命名空间中声明了内容。出于通常的原因,我宁愿避免这样做。我考虑过这样做:namespacefoo{#include}这样做是个好主意吗?我是否有不包括编辑头文件的替代方案? 最佳答案 不,这是个坏主意。对于C++声明,可能会引入链接器错误,因为标识符在错误的命名空间中声明。使用C声明,它可以工作,但它可能会隐藏全局命名空间中标识符之间的冲突(我猜你试图避免),直到链接时间;它不会真的将标

c++ - "warning: operation of ... may be undefined"用于三元运算——不是 if/else block

这个问题在这里已经有了答案:Undefinedbehaviorandsequencepoints(5个答案)关闭6年前。这是我的代码:intmain(){staticinttest=0;constintanotherInt=1;test=anotherInt>test?test++:0;if(anotherInt>test)test++;elsetest=0;return0;}这是我构建它时产生的警告:../main.cpp:15:40:warning:operationon‘test’maybeundefined[-Wsequence-point]test=anotherInt>te

c++ - Size of the Byte 是否可以大于 octet 8 bits

我正在浏览http://www.parashift.com/c++-faq/index.html在那里我发现字节也可以是64位http://www.parashift.com/c++-faq/very-large-bytes.html.一个字节的那么多存储容量有什么用? 最佳答案 重点不在于大字节“本身”的用处,而在于,对于标准而言,字节是系统上的最小可寻址数量1;如果系统无法以小于64位的单位寻址其内存,则char将为64位。显然,在现代通用计算机上几乎不可能找到这种奇怪的东西,这些奇怪的东西出现在非常专业的硬件上(我听说DSP特