【发布时间】:2012-09-01 01:22:50
【问题描述】:
我在 Mac OSX Lion 上使用 C++,并创建了以下代码:
float* floatArray = new float[10];
for(int i = 0; i < 10; i++)
{
floatArray[i] = 0.0 ;
}
std::cout<< "Test size of a float " << sizeof(floatArray[0]) << std::endl;
// The value is 4 byte which is what I would expect.
std::cout<< "Test the size of the whole array" << sizeof(floatArray) <<std::endl;
// the value is 8. I would have expected the value to be 40 bytes.
我不明白什么?
提前致谢
【问题讨论】:
-
您使用的是 c++。如果需要动态分配的数组,为什么不使用
std::vector? -
哎呀,这是一个错字。我只是把它放在一起作为例子。我应该像其他人一样。
-
@Grizzly 我正在处理数字浮点数据(有时由演出)。 #1 我不相信向量和浮点数组一样快。 #2 我需要索引数组(不是迭代),#3 我正在使用 C File 来编写二进制文件。 C File 比 iostream 快得多,C File 允许将浮点数组直接传递给流运算符。 #4 之前有人告诉过我,即使您可以使用 .at() 访问矢量索引,它也不正确。
-
vector有时(非常罕见)明显变慢,但vector可以防止很多错误,例如您问题中的错误。vector可以像数组一样使用[]进行索引,您可以使用&myvector[0]将数据发送到流中。所以你所有的反驳都没有了。 -
#1 它不应该变慢(如果使用正确)。永远记住性能优化的第一条规则:永远配置文件,永远不要假设#2? #3 使用
vector或float*无关紧要 #4 您可以使用.at()或[]进行索引,这并没有什么不妥之处。在vector上使用[]应该不会比在指针上使用它慢(至少在释放模式下,否则可能会有边界检查,但谁关心调试模式下的性能)。最重要的是vector是连续的,因此您可以获得float*,它可以像使用&vec[0]的floatArray 一样使用。