我理解指针用于指向对象,因此您必须在程序中使用相同的指针.但是,是否以及如何存储指针名称.如果声明一个指针名称占用的资源多于它所指向的对象,那么它是否过分?
int intOne = 0;
int *this_pointer_is_pointing_towards_intOne = &intOne;
Run Code Online (Sandbox Code Playgroud)
我知道这是一个荒谬的例子,但我只是试图了解这个想法.
编辑:指针的名称必须存储在某处,占用的字节数多于指向对象的地址.
ove*_*ked 23
变量名的长度对程序的大小没有任何影响,只是编写程序所需的时间长度.
Joh*_*itb 14
只有编译器才能找到要引用的变量,只需要局部变量的名称.编译后,这些名称通常会被删除,并完全被数字符号或等价物替换.对于所有实际上没有链接的名称都会发生这种情况(当然,如果你进行调试构建,情况可能会有所不同).因此,功能参数也是如此.
例如,全局变量的名称无法删除,因为您可以从程序中的其他单元使用它,并且链接器必须能够查找它.但是在您的程序被链接之后,甚至可以删除这些程序的名称.
毕竟,这些并不占用运行时内存.这些名称存储在重新分配表中以便链接(请参阅strip
程序如何删除这些名称).
但无论如何,我们正在讨论一些已被对齐和诸如此类浪费的字节.将其与模板实例化的地狱名称进行比较.试试这个:
readelf -sW /usr/lib/libboost_*-mt.so | awk '{ print length($0), $0 }' | sort -n
Run Code Online (Sandbox Code Playgroud)
不存储指针名称.指针名称(或该事项的任何变量名称)不会编译到最终二进制文件中(前提是您不能使用设置为on的符号进行编译).
指针只是存储在内存中的整数(或长整数),而内存又指向它们指向内存中某个位置的项目.