每次有人delete[]在这里问一个问题时,总会有一个非常笼统delete[]的回答:“ C++ 就是这样做的,使用”。来自普通的 C 背景,我不明白为什么需要一个不同的调用。
使用malloc()/free()您的选择是获取指向连续内存块的指针并释放连续内存块。实现领域中的某些东西会根据基地址知道您分配的块的大小,以便您何时必须释放它。
没有功能free_array()。我在与此相关的其他问题上看到了一些疯狂的理论,例如调用delete ptr只会释放数组的顶部,而不是整个数组。或者更正确的是,它不是由实现定义的。当然……如果这是 C++ 的第一个版本,并且您做出了一个有意义的奇怪设计选择。但是为什么 with$PRESENT_YEAR的 C++ 标准没有被重载???
似乎 C++ 添加的唯一额外的一点是遍历数组并调用析构函数,我认为这可能是它的症结所在,它实际上是使用一个单独的函数来为我们节省单个运行时长度查找,或者nullptr在列表的末尾,以换取折磨每个新的 C++ 程序员或程序员,他们有一个模糊的一天并且忘记了有一个不同的保留字。
如果除了“这就是标准所说的并且没有人质疑它”之外还有其他原因,有人可以一劳永逸地澄清吗?
如果我只是close()在输出流中调用,输出是保证的,还是需要我flush()总是调用?
简单地放入C和变体(与wuss java及其虚拟机不同),不同目标上的基元类型的大小可能会有很大差异,除非您使用定义的固定宽度类型stdint.h,否则实际上无法保证,甚至您的实现也是如此支持他们.
无论如何假设(因为在大多数现代机器上,一个字节是八位字节,为了网络目的,我假设(ASCII))sizeof是以字节还是以八位字节的形式返回数据类型的大小?
这可能听起来像一个愚蠢的问题,但直到最近,如果你试图卸载正在使用的卷,Finder报告它正在使用,但不是由谁.这是简单的Unix功能,如果文件在挂载点上打开,则不允许它弹出.但是现在他们似乎添加了一些功能,让用户知道当前正在使用已安装系统的程序,我一直在查看Unix的操作系统(Linux发行版)的fopen,stat等手册页,我可以似乎找不到类似的功能.
这个功能是专门的,还是我只是在错误的地方?
我的构建系统MacOS 10.6.3上用于POSIX数学库的接口是math.h,但是在我的目标系统上,接口文件的名称是cmath.h.在学校我们使用cmath,我想确保我的项目在交付时编译,这是如何实现的.学校的服务器和工作站是运行Windows XP的x86.GCC可在两个平台上使用.
我开发了一个简单的C++程序来测试OpenSSL AES/GCM调用到EVP接口的性能.它的作用是取一个1024字节的字符串,用密钥加密它,然后用相同的密钥加密结果,并一次又一次地加密.我正在使用增量4字节初始化向量.
当我在我的Macbook Pro(Intel i7)上测试它时,结果非常令人印象深刻:在一个内核上运行上述过程的1048576次迭代需要一秒钟.这是1 GB/s的加密速度.如果我们同时使用所有核心,则为8 GB/s(或多或少).
现在,我在Raspberry PI 2上移植了相同的基准测试.然而,当我运行它时,需要0.16秒来完成1024次迭代.在单核上,这或多或少为6 MB/s.
现在,我很明白,现代昂贵的i7处理器和在Raspberry上运行的小型ARM处理器之间存在着巨大的巨大差异,但仍然快170倍.因此,在假设Raspberry PI 2 真的那么糟糕之前,我想检查这些参数是否合理.
有没有人做过某种基准呢?Raspberry上6 MB/s的加密速度是否合理?或者我做错了什么?
(我通过我的Macbook USB给它供电:可能这么慢,因为它没有获得足够的功率?这听起来听起来不合理.它根本不会启动,对吧?或者可能有一个超频机制来省电吗?)
更新1:我openssl -evp speed aes-256-cbc在我的Macbook和Raspberry上做了.
在Macbook上:
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
aes-256-cbc 534591.95k 564057.62k 566522.81k 570717.87k 574876.33k
Run Code Online (Sandbox Code Playgroud)
在覆盆子上:
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
aes-256-cbc 14288.53k 16653.74k 17165.31k 17298.43k 17337.00k
Run Code Online (Sandbox Code Playgroud)
这仍然是因素33,但英特尔处理器可以使用硬件加速AES调用.不过,据我所知,GCM模式应该比CBC快得多.我不知道为什么但看起来没有一个用于GCM的openssl基准权利,但即使假设它们的表现相同,我也错过了一个因素3.
更新2检查此页面:http://elinux.org/RPi_Performance#OpenSSL.看起来我缺少10 MB/s以上.总计:使用AES/CBC(应该是)为27 MB/s,使用AES/GCM为6 MB/s(实际上是这样).
我对java比较陌生,没有指针的引用传递让我感到困惑.我为家庭作业编写了一个函数,要求我返回用户输入的长度,并将使用输入分配给传入的数组,当方法退出用户输入数组丢失时,出现了什么问题.
public static int readArray(char[] intoArray)
{
char[] capture = captureInputAsCharArray(); //User input comes back as char[]
System.arraycopy(intoArray,0, capture, 0, capture.length);
return capture.length;
}
public static main(String[] args)
{
size = readArray(arrItem7); // item 7
System.out.println(size);
printOneInLine(arrItem7); // prints individual elements of array
}
Run Code Online (Sandbox Code Playgroud) 我有两个分支dev和a。我需要将功能合并a到 中dev,但我的队友在一个文件中创建了某些功能,但尚未准备好合并。如果我只是使用我的合并和解析,git 会将此文件中的更改标记为无效,并且不会允许这些更改稍后合并,而是在我尝试重新合并分支时快进。如果我不解决冲突,git 将拒绝执行合并。
我解决此问题的策略是在旁边创建一个分支并抑制损坏的功能,然后合并到该分支中。问题是 git 命令变得有些复杂,所以我需要专家的帮助。
我希望如果可能的话将这种类型的操作概括为 git 扩展,我会调用一些达到git-cherrymerge.
步骤如下:
我不是filter-branchor方面的专家rebase,看起来我可以通过滥用它们来严重破坏历史。
我想我的问题是