【发布时间】:2014-03-06 19:07:29
【问题描述】:
在 C 中,typedef 不会赋予您任何额外的类型安全性。您可以在任何可以使用旧类型的地方使用新类型。有时这就是我想要的,有时不是。有时我希望编译器在我误用我的新类型时警告我。
为了做到这一点,我有时会这样做:
typedef struct {
int value;
} NewType;
NewType doSomethingNT(NewType a, NewType b) {
return a.value + b.value;
}
相比:
int doSomethingI(int a, int b) {
return a + b;
}
(那个加号只是一个例子。让我们假设在这两种情况下都有一个函数调用开销,或者我要求在这两种情况下内联函数。但是我们不要将 doSomethingNT 与裸 + 运算符进行比较,显然后者更快,因为它没有函数调用开销)
我想我在问,将原始类型“装箱”为单元素结构,但使用该结构作为值类型是否有任何开销。 (即我没有调用 malloc 并使用指向它的指针,就像 Java 中的装箱方式一样。)
【问题讨论】:
-
唯一的开销是编译时间
-
Veeerrrry 类似于 c-class-wrapper-around-fundamental-types,但那是关于 C++...
-
这很有趣,但最好的答案可能是测量一些实际程序,版本 1 使用普通类型,版本 2 使用您的“盒子类型”。可能优化器可以使版本 2 不比版本 1 慢
-
测量这么小的变化可能很困难,因为如果有开销,它可能非常小。我认为回答这个问题的最好方法是将每个版本编译成汇编,看看有什么区别(如果有的话)。
标签: c performance struct int