gpt4 book ai didi

c++ - 简单的库问题 (C++)

转载 作者:太空狗 更新时间:2023-10-29 20:06:18 24 4
gpt4 key购买 nike

<强>1。 共享库和动态库是一回事吗?
Windows只是将它们标记为.dll,而linux将它们标记为.so

<强>2。如果共享库有大量函数供程序使用,那么这些函数何时加载到内存中?
在程序开始时?实际调用特定函数的时间?

<强>3。如果我像这样创建一个库:

#ifndef SHARED_H
#define SHARED_H

#include <iostream>
#include <string>

namespace shared
{
void Function1(void);
void Function2(void);
void Function3(void);
void Function4(void);
void Function5(void);
void Function6(void);
...
void Function99(void);
void Function100(void);
...
}
//assume none of these functions call each other

#endif

而我的客户端程序只调用其中一个函数,它们的性能会不会因为所有其他额外函数未被使用而降低?
不担心编译时间..只是实际运行时间

<强>4。如果我使用类,问题 3 的场景是否不同:

#ifndef SHARED_H
#define SHARED_H

#include <iostream>
#include <string>

class Shared
{
public:
void Function1(void);
void Function2(void);
void Function3(void);
void Function4(void);
void Function5(void);
void Function6(void);
...
void Function99(void);
void Function100(void);
...
private:
protected:
};
//assume none of these functions call each other

#endif

5. 我习惯制作很多对象(.o 文件),然后将它们链接在一起以制作我的可执行文件。将我所有的对象(通常是类)转换成一个 .so 文件然后将它们链接在一起会更好吗?
我知道可执行文件将依赖于 .so 文件,这与第一种方法不同,后者可以在编译后删除对象,但对此有何建议?

6.我对 -fPIC 和 -fpic 之间的区别有点一无所知
我听说 -fPIC 将始终有效,并且 -fpic 取决于目标。
目标依赖是什么意思?如果库总是要在同一台机器上编译和使用,我使用-fpic 是否安全?

some of these questions may be trivial, but I want to be certain about the things I've read so far. I appreciate any and all responses
*If relevant: using gcc version 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3)

最佳答案

对于第一个和第二个问题:在 Windows Xp 中,线程有 dll(动态链接库)作为组件。线程可以被视为轻进程。一个进程只不过是执行中的程序。(运行时)。我猜dll和.so是相似的(可能存在变化,不确定)

外部库通常以两种形式提供:静态库和共享库。静态库是“.a”文件。什么时候程序链接到静态库,机器代码来自程序使用的任何外部函数的目标文件都是从将库放入最终的可执行文件中。

链接到共享库的可执行文件只包含一个小的它需要的功能表,而不是完整的机器代码来自外部函数的目标文件。可执行文件之前开始运行,外部函数的机器代码被复制到操作系统从磁盘上的共享库文件中获取内存——a称为动态链接的过程。动态链接使可执行文件更小并节省磁盘空间,因为库的一个拷贝可以在多个程序之间共享。

对于第三个问题:因为在共享库中只有函数表被加载而不是代码的实际助记符所以我们保存数据不像静态库在编译时加载助记符。这可以推断从上面的解释。

对于第 5 个问题: 我认为只有当您知道您很少使用这些功能时才将它们设置为“.so”会更好。如果您打算经常使用这些功能然后将那些包含 lib 的函数设为静态。因为在运行时获取它们会增加响应时间。

关于c++ - 简单的库问题 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8423918/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com