2012-01-19 20 views
0

在处理器堆栈上push mov和pop等都是单个指令。用户堆栈的单指令推/弹而不是附件功能调用?

编译源代码时,编译器生成单机指令版本,但在运行期间,假设堆栈是...以及常规堆栈容器,在运行时访问存储在堆栈中的值需要函数调用翻译成吨机器码。

对于动态运行时对象,可以达到相同级别的效率,而不是使用比单个机器指令长的setter和getter成员函数?

我的想法是使用标记指针,但我不知道如何从字面上将其值推入内存位置,或者在运行时从内存位置中将其值推入,而不诉诸函数调用。

内联程序集可能是一个选项,我想尽量避免。但我想我仍然必须把它放在一个函数体内,所以它不会是一个单一的指令。

+0

你知道一个编译器可以内嵌C函数吗? – Borealid

+0

将想法正确地表达为函数,真正*好的*编译器*可以*为您开箱即用地管理它。内联可以让你获得最大的收益,而大多数现代编译器都可以做到这一点。尝试检查您正在使用的编译器的汇编输出。 – dmckee

回答

1

听起来像你想要做的是从你的getters/setter选择额外的callret。在这种情况下,您可以使用关键字inline来告诉编译器内联该特定功能。如果它们不太复杂,另一种方法是使用C宏函数对你的getter/setter进行编码。