精华内容
下载资源
问答
  • 共用枚举区别

    千次阅读 多人点赞 2021-06-04 18:49:05
    共用体:不同的变量共享一段内存 一般形式:union 共用体名 { 成员表列 } 变量表列; 要点:共用体声明,定义引用类似结构体,但共用体所占的内存大小是最长成员所占的大小,但其只能放其中的一个变量,而且是最后...

    ❤️强烈推荐人工智能学习网站❤️

    共用体:不同的变量共享一段内存

    一般形式:union 共用体名 { 成员表列 } 变量表列;

    要点:共用体声明,定义和引用类似结构体,但共用体所占的内存大小是最长成员所占的大小,但其只能放其中的一个变量,而且是最后被声明的

    #include<stdio.h>
     
    union Data
    {
         int i;
         float f;
    };
     
    int main()
    {
         union Data Data1;
         Data1.i=10;
         Data1.f=3.14;
         printf("%d",Data1.i);
         printf("%f",Data1.f);
      
        return 0;
    }
    

    只有f能被打印出来

    枚举:把变量可能的值一一列出来

    一般形式:enum [枚举名] {枚举元素表};

    看一个程序

    #include<stdio.h>
     
    typedef enum
    {
             a,
             b,
             c
    }Math;
     
    int main()
    {
          printf("%d",a);
          printf("%d",b);
          printf("%d",c);
     
          return 0;
    }
    

    打印:0 1 2 值对应

    ❤️强烈推荐人工智能学习网站❤️

    展开全文
  • 小心两个共享共用同一个静态库

    千次阅读 2015-05-20 16:08:43
    小心两个共享共用同一个静态库.pdf 注:以下内容仅针对Linux/GCC环境,不涵盖Windows,包括Cygwin环境。 下载测试代码:x.zip(帖子的略不同,x.zip包中的全局变量是个类对象,带有构造析构函数) 推荐...

    小心两个共享库共用同一个静态库.pdf

    注:以下内容仅针对Linux/GCC环境,不涵盖Windows,包括Cygwin环境。

    下载测试代码:x.zip和帖子的略不同,x.zip包中的全局变量是个类对象,带有构造和析构函数
    推荐阅读:http://blog.chinaunix.net/uid-20682147-id-351108.htmlLinux上制作可执行的共享库示例


    问1:如果测试中的全局变量global_var是个带构造和析构的类对象,会如何?(答案在最后
    问2:如果使用-fPIE替代-fPIC编译链接,会是什么结果了?


    位置无关代码(PIC)对常量和函数入口地址的操作都是采用基于基寄存器(base register)BASE+ 偏移量的相对地址的寻址方式,即使程序被装载到内存中的不同地址(即 BASE值不同),而偏移量是不变的,所以程序仍然可以找到正确的入口地址或者常量。

    为何要小心?原因是在使用dlopen动态加载共享库时,如果静态库中包含有全局变量,可能会出现名同地址不同的全局变量。
    解决办法:总是使用RTLD_GLOBAL加载共享库,而不是RTLD_LOCAL。以下是测试程序:

    Makefile

    1. # test shared libraries use static a same static library
    2. # the global variables defined at static library have the same address

    3. all: x libshared_lib1.so libshared_lib2.so
    4. x: x.cpp #libstatic_lib.a #libshared_lib1.so #libshared_lib2.so
    5. g++ -g -o $@ $^ -ldl

    6. libstatic_lib.a: static_lib.h static_lib.cpp
    7. g++ -g -fPIC -c static_lib.cpp -I.
    8. ar cr $@ static_lib.o

    9. libshared_lib1.so: shared_lib1.cpp libstatic_lib.a
    10. g++ -g -fPIC -shared -o $@ $^ -I.

    11. libshared_lib2.so: shared_lib2.cpp libstatic_lib.a
    12. g++ -g -fPIC -shared -o $@ $^ -I.

    13. clean:
    14. rm -f static_lib.o libstatic_lib.a
    15. rm -f shared_lib1.o libshared_lib1.so
    16. rm -f shared_lib2.o libshared_lib2.so
    17. rm -f x

    测试程序x.cpp
    1. #include <dlfcn.h>
    2. #include <stdio.h>
    3. #include <stdlib.h>

    4. extern void call_foo(const char* name, int load_flag);
    5. int main()
    6. {
    7.         int flag = RTLD_GLOBAL|RTLD_NOW;  // 如果是RTLD_GLOBAL则静态库中定义的全局变量在共享库中名同地址也同
    8.         //int flag = RTLD_LOCAL|RTLD_NOW;  // 如果是RTLD_LOCAL则静态库中定义的全局变量在共享库中名同地址不同
    9.                 
    10.         call_foo("./libshared_lib1.so", flag);
    11.         call_foo("./libshared_lib2.so", flag);

    12.         return 0;
    13. }

    14. // RTLD_NOW
    15. // RTLD_LAZY
    16. // RTLD_GLOBAL
    17. // RTLD_LOCAL
    18. void call_foo(const char* name, int load_flag)
    19. {
    20.         char *error;
    21.         void (*foo)();

    22.         void* handle = dlopen(name, load_flag);
    23.         if (NULL == handle)
    24.         {
    25.                 fprintf (stderr, "%s\n", dlerror());
    26.                 exit(1);
    27.         }

    28.         dlerror(); /* Clear any existing error */
    29.         *(void **) (&foo) = dlsym(handle, "foo");
    30.         if ((error = dlerror()) != NULL)
    31.         {
    32.                 fprintf (stderr, "%s\n", error);
    33.                 exit(1);
    34.         }

    35.         (*foo)();
    36. }

    静态库头文件static_lib.h
    1. extern int global_var;

    静态库实现文件 static_lib.cpp
    1. #include <stdio.h>
    2. int global_var = 2013;

    第1个共享库实现文件shared_lib1.cpp 
    1. #include "static_lib.h"
    2. #include <stdio.h>

    3. extern "C" void foo()
    4. {
    5.         global_var = 1111;
    6.         printf("%p 1-> %d\n", &global_var, global_var);
    7. }

    第2个共享库实现文件shared_lib2.cpp
    1. #include "static_lib.h"
    2. #include <stdio.h>

    3. extern "C" void foo()
    4. {
    5.         printf("%p 2-> %d\n", &global_var, global_var);
    6. }

    测试环境:
    x86_64 x86_64 GNU/Linux  2.6.16

    附:
    1)如果你想覆盖系统调用,可以使用LD_PRELOAD或/etc/ld.so.preload,也可进一步了解RTLD_NEXT;
    2)静态库顺序关系:假设X.a依赖Z.a,则顺序为X.a Z.a,亦即被依赖的排在后面,否则链接时会报某些符号找不到(详细请参见:链接静态库的顺序问题)。

    答:结果是即使以RTLD_GLOBAL方式加载,都会出现两次构造和析构调用,如果是RTLD_GLOBAL方式,地址仍然相同,也就是同一个对象执行了两次构造和析构,后果当然是非常危险。运行测试代码x.zip即可得到验证。



    段表(Section Table) 一个描述文件中各个段的数组
    .code/.text 代码段
    .data 段保存的是那些已经初始化了的全局静态变量和局部静态变量
    .rodata/.rodata1 段存放的是只读数据,一般是程序里面的只读变量(如const修饰的变量)和字符串常量
    .bss 段存放的是未初始化的全局变量和局部静态变量
    .plt/.got 段动态链接的跳转表和全局入口表
    .symtab 符号表(Symbol Table)
    .strtab 字符串表(String Table),用于存储ELF文件中用到的各种字符串
    .init/.fini 程序初始化与终结代码段
    .note 额外的编译器信息。比如程序的公司名、发布版本号等
    .line 调试时的行号表,即源代码行号与编译后指令的对应表
    .hash 符号哈希表
    .dynamic 动态链接信息
    .debug 调试信息
    .comment 存放的是编译器版本信息,比如字符串:”GCC: (GNU) 4.2.0”
    自定义段 GCC提供了一个扩展机制,使得程序员可以指定变量所处的段:
    1.__attribute__((section("FOO"))) int global = 42;
    2.__attribute__((section("BAR"))) void foo()
    {
    }
    在全局变量或函数之前加上"__attribute__((section("name")))"属性就可以把相应的变量或函数放到以"name"作为段名的段中。

    • 如果被依赖的不是静态库,而是共享库,则无论何种方式都不存在问题
    • 为何即使RTLD_GLOBAL加载,也会执行两次构造和析构?原因是两个共享库存在相同的代码段,如果被依赖的是共享库,则不存在这个问题


    1. -Wl的使用

    2. -Wl表示后面的参数传递给链接器,其中l是linker的意思。

    3. 链接时指定共享库的搜索路径(类似于设置LD_LIBRARY_PATH):
    4. -Wl,-rpath=/usr/local/abc:/data/abc
    5. 以上也可以分开写:
    6. -Wl,-rpath=/usr/local/abc -Wl,-rpath=/data/abc

    7. 部分库链接它的静态库,部分库链接它的共享库:
    8. -Wl,-static -lb -Wl,-call_shared -la -lz

    9. 指定链接器:
    10. -Wl,-dynamic-linker /lib/ld-linux.so.2 -e _so_start

    11. 指定导出的符号:
    12. -Wl,--export-dynamic,--version-script,exports.lds

    13. exports.lds的格式可以为:
    14. {
    15. global:
    16. foo;
    17. };

    18. 指定共享库的soname:
    19. -Wl,--export-dynamic,--version-script,exports.lds,-soname=libqhttpd.so


    20. -rpath 增加共享库搜索路径
    21. --retain-symbols-file表示不丢弃未定义的符号和需要重定位的符号
    22. --export-dynamic 创建一个动态连接的可执行程序时, 把所有的符号加到动态符号表中


    FROM: http://blog.chinaunix.net/uid-20682147-id-3760647.html




    展开全文
  • 多人共用锐捷账号之无线连接共享Internet连接
  • 装系统 一、安装VirtualBox虚拟机软件: ...此时主机虚拟机就可共用剪贴板啦。 主机虚拟机之间的文件拖放: https://blog.csdn.net/u013066292/article/details/78383327?locationNum=8&fps=1

    装系统

    一、安装VirtualBox虚拟机软件:

    下载地址:https://pan.baidu.com/s/1dRlQ7qozTarZ82wL3IppqQ

    二、导入操作系统(.vmdk文件)

    如果只有.ova文件,可将.ova转换成.vmdk文件。

    参照地址:https://blog.csdn.net/qq_32716429/article/details/81262245

     

     

     

     

    其它的默认就可以了,完成后的界面:

    点击启动下拉框:正常启动、无界面启动、分离式启动,我一般选择分离式启动,师傅教的,我也不清楚为什么。

     

    共享文件夹

    打开VirtualBox,按下图顺序操作

    进入操作系统,点击我的电脑,右击选中“映射网络驱动器”

    就可以和主机共享文件夹了

     

     

    主机、虚拟机共用剪贴版

    此时主机和虚拟机就可共用剪贴板啦。

    主机和虚拟机之间的文件拖放:

    https://blog.csdn.net/u013066292/article/details/78383327?locationNum=8&fps=1

    展开全文
  • 想能让办公室里的所有人员都能共用这一台打印机。那么把打印机设置成共享就能很好解决这一问题,那么在局域网下是如何共享打印机的,下面为大家详细介绍下
  • 共用和公用的区别

    2021-07-04 08:56:24
    1、共用需要指定的对象,如:这个房间你小红共用。 2、公用一般是没有确定的使用对象的,如:这个卫生间是公用的。 二、使用范围不同。 1、共用范围较小,人数少,如:几个人共用一台电脑。 2、公用范围较大,社会...

    一、使用对象不同。

    1、共用需要指定的对象,如:这个房间你和小红共用。

    2、公用一般是没有确定的使用对象的,如:这个卫生间是公用的。

    二、使用范围不同。

    1、共用范围较小,人数少,如:几个人共用一台电脑。

    2、公用范围较大,社会全体成员都可以得到或分享,如:公共厕所、公用电话亭。

    三、引证释义不同。

    1、共用

    谓为国所用而死。共,通“ 供 ”。

    春秋左丘明《左传·文公二年》:“死而不义,非勇也。共用之谓勇。”

    白话文:“死得不义气,这不是勇敢的表现。共同为国所用而死。”

    2、公用

    公共所用;共同享用。

    现代巴金《探索集·世界语》:“世界语一定会成为全体人类公用的语言。”

    展开全文
  • 共用体与结构体的区别共用体:使用union 关键字共用体内存长度是内部最长的数据类型的长度。共用体的地址内部各成员变量的地址都是同一个地址结构体大小:结构体内部的成员,大小等于最后一个成员的偏移量+最后一...
  • C语言共用与结构体的区别

    千次阅读 2016-12-21 22:58:23
    共用体与结构体的区别共用体: 使用union 关键字 共用体内存长度是内部最长的数据类型的长度。 共用体的地址内部各成员变量的地址都是同一个地址结构体大小: 结构体内部的成员,大小等于最后一个成员的偏移量...
  • 这段时间,为了考个驾照,为了完成自己在大学里设定的目标:在对的时间做对的事,把该拿的证书都拿下,不然以后更花时间精力金钱。专门跑回学校一趟,为了它,还丢了工作。现在考过了,但现在这个时间段再出去,...
  • 电脑技巧之共用一个IP地址共享上网 很好的电子资料,感兴趣的同学可以下载学习。
  • 这里所说共用打印机是指网络打印机网络共享打印机,后者可简称共享打印机,安装中遇到的困难较多,下面以HP 5200 LJ机型为例讨论。一、首先明确几个概念1、本地打印机:用数据线连接并安装的打印机:电脑←数据线...
  • C++结构体和共用

    2017-05-01 08:00:25
    结构体和共用
  • 2013 年中央政法工作会议,明确提出涉法涉诉信访工作改革的要求,并开始在...大数据涉法涉诉信访利用现代信息技术打破信息“壁垒”,实现政法各部门业务系统互联互通、数据共享共用。信访接待、受理、办理全程留痕...
  • 在c++中,结构体(struct)和共用体(union)是两种很相似的复合数据类型,都可以用来存储多种数据类型,但是两者还有很大的区别。 结构体(struct) 结构是用户自定义的类型,比数组更灵活,同一个结构可以...
  • 两个电脑怎么共用一个键盘有些办公人员需要用两台电脑来工作,但是只想要一套鼠标键盘控制,那么两个电脑怎么共用一个键盘呢?下面就让jy135来告诉大家吧,欢迎阅读。1、首先要知道两台电脑的ip地址。ip地址可以通过...
  • IIS与Apache共用80端口方法,如何让iisapache共享80端口 调试程序,本机安装iis与apache,无法同时使用80端口,现给出解决方法:方法一: IIS5,多IP下共存,IIS为192.168.0.1,apache为192.168.0.2 原文地址 c:...
  • 本文遵循CC创作共用版权协议,要求署名+非商业+相同方式共享(如下图中的BY-NC-SA)。在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处。 文章版权分类.png ...
  • 共用中断和共用中断函数的判断

    千次阅读 2016-10-10 09:53:46
    STM32外部中断查询: 15-10线的外部中断共用一个中断函数,怎么在该函数里查询是哪个中断线产生了中断呢? 使用 EXTI_GetITStatus()来查询哪根线产生了中断。比如EXTI_GetITStatus(EXTI_Line13)就是查询13线是否...
  • 近日,广州市政府官方网站公布了工信委、商务委国资委3个部门的“三定方案”。三个部门共“定编”339名,其中商务委编制最多,占比超4成。机构设置方面,工信委下设的广州市大数据管理局(正处级)颇具创新,其...
  • 本文编辑:富哥 目前,服务器使用的带宽,可以分为共享带宽独享...使用共享带宽的缺点在于一条线路上所有机柜共用带宽,可是对于每个机柜应用的不同。因此,每个机柜对带宽的占有率不同,这样占用率大的机柜势必影...
  • C++的union本质上也是个类,跟struct性质几乎一致但是有一个最大的区别,数据共享内存。 说到共享内存就要说下union的内存分配:union的大小是按照union里面的成员内存的最大值而分配的,函数不占内存,但是如果没有...
  • 共享IP独享IP的区别

    2021-01-27 16:32:10
    现如今,代理IP的发展速度越来越快,网络中对于代理IP的使用是很多的,那么大家知道共享IP独享IP的区别是什么吗?下面就给大家详细介绍下相关信息。 首先是用户量以及安全性的区别共享IP与独享IP所面对的用户量...
  • 1、双人共享一台电脑主机 两个人同时使用一台电脑主机一台电脑主机配合两台显示器两套键盘鼠标来实现双人共享一台主机很难吗?只要使用BeTwin即可轻松实现PC主机克隆,普通网络游戏、QQ聊天、网页浏览以及文字办公...
  • STM32共用中断和共用中断函数的判断

    千次阅读 2016-12-09 21:21:35
    STM32外部中断查询: 15-10线的外部中断共用一个中断函数,怎么在该函数里查询是哪个中断线产生了中断呢?使用 EXTI_GetITStatus()来查询哪根线产生了中断。 比如EXTI_GetITStatus(EXTI_Line13)就是查询13线是否...
  • 怎么从电脑上查看共用wifi密码是多少卡饭网本站整理2018-08-10Win10查看wifi密码主要有两种方法,一种是借助笔记本连接的无线网络属性,查看Wifi密码,另外一种是进入无线路由器设置界面查看Wifi密码。Win10怎么看...
  • 原文地址::http://165553338.blog.163.com/blog/static/499403632010112410037627/ 电信、网通、一条网线限制多台电脑上网解说与破解 ...     多台电脑共用一根网线如何设置宽带共享
  • C语言函数_数组_指针_字符串_结构体共用体: https://pan.baidu.com/s/1d3hMpShGjwhInRBLc-oOEg

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 86,091
精华内容 34,436
关键字:

共享和共用的区别