草庐IT

static_allocator

全部标签

c++ - "Memory allocated at compile time"的真正含义是什么?

在C和C++等编程语言中,人们经常提到静态和动态内存分配。我理解这个概念,但“在编译时分配(保留)所有内存”这句话总是让我感到困惑。据我了解,编译将高级C/C++代码转换为机器语言并输出可执行文件。如何在编译文件中“分配”内存?内存不是总是与所有虚拟内存管理的东西一起分配在RAM中吗?根据定义,内存分配不是运行时概念吗?如果我在我的C/C++代码中创建一个1KB的静态分配变量,这是否会使可执行文件的大小增加相同的数量?这是在“静态分配”标题下使用该短语的页面之一。BackToBasics:Memoryallocation,awalkdownthehistory

c# - 'statically linked' 和 'dynamically linked' 是什么意思?

我经常听到“静态链接”和“动态链接”这两个术语,通常指的是用C编写的代码。,C++或C#.它们是什么,它们到底在说什么,它们在链接什么? 最佳答案 从源代码(你写的)到可执行代码(你运行的)有两个阶段(在大多数情况下,不考虑解释代码)。首先是将源代码转换为目标模块的编译。第二个,链接,是将对象模块组合在一起形成可执行文件。区别在于,除其他外,允许第​​三方库包含在您的可执行文件中,而您不会看到它们的源代码(例如用于数据库访问、网络通信和图形用户界面的库),或者用于在不同的语言(例如C和汇编代码),然后将它们链接在一起。当您静态将文件

c# - 'statically linked' 和 'dynamically linked' 是什么意思?

我经常听到“静态链接”和“动态链接”这两个术语,通常指的是用C编写的代码。,C++或C#.它们是什么,它们到底在说什么,它们在链接什么? 最佳答案 从源代码(你写的)到可执行代码(你运行的)有两个阶段(在大多数情况下,不考虑解释代码)。首先是将源代码转换为目标模块的编译。第二个,链接,是将对象模块组合在一起形成可执行文件。区别在于,除其他外,允许第​​三方库包含在您的可执行文件中,而您不会看到它们的源代码(例如用于数据库访问、网络通信和图形用户界面的库),或者用于在不同的语言(例如C和汇编代码),然后将它们链接在一起。当您静态将文件

java - "static"后面的 "import"修饰符是什么意思?

当这样使用时:importstaticcom.showboy.Myclass;publicclassAnotherclass{}importstaticcom.showboy.Myclass和importcom.showboy.Myclass有什么区别? 最佳答案 见DocumentationThestaticimportdeclarationisanalogoustothenormalimportdeclaration.Wherethenormalimportdeclarationimportsclassesfrompackage

java - "static"后面的 "import"修饰符是什么意思?

当这样使用时:importstaticcom.showboy.Myclass;publicclassAnotherclass{}importstaticcom.showboy.Myclass和importcom.showboy.Myclass有什么区别? 最佳答案 见DocumentationThestaticimportdeclarationisanalogoustothenormalimportdeclaration.Wherethenormalimportdeclarationimportsclassesfrompackage

java - 'static' 关键字在类中的作用是什么?

具体来说,我正在尝试这段代码:packagehello;publicclassHello{Clockclock=newClock();publicstaticvoidmain(Stringargs[]){clock.sayTime();}}但它给出了错误Cannotaccessnon-staticfieldinstaticmethodmain所以我把clock的声明改成这样:staticClockclock=newClock();它奏效了。将关键字放在声明之前是什么意思?就可以对该对象执行的操作而言,它究竟会做什么和/或限制什么? 最佳答案

java - 'static' 关键字在类中的作用是什么?

具体来说,我正在尝试这段代码:packagehello;publicclassHello{Clockclock=newClock();publicstaticvoidmain(Stringargs[]){clock.sayTime();}}但它给出了错误Cannotaccessnon-staticfieldinstaticmethodmain所以我把clock的声明改成这样:staticClockclock=newClock();它奏效了。将关键字放在声明之前是什么意思?就可以对该对象执行的操作而言,它究竟会做什么和/或限制什么? 最佳答案

c++ - 哪个更快 : Stack allocation or Heap allocation

这个问题听起来可能相当初级,但这是我与另一位合作开发者的争论。我一直在尽可能地堆栈分配东西,而不是堆分配它们。他一边跟我说话,一边看着我,并评论说没有必要,因为它们在性能方面是相同的。我一直认为堆的增长是恒定的时间,堆分配的性能取决于堆的当前复杂性,用于分配(找到适当大小的孔)和取消分配(折叠孔以减少碎片化,因为如果我没记错的话,许多标准库实现在删除期间需要时间来执行此操作)。这让我觉得可能非常依赖编译器。特别是对于这个项目,我使用的是MetrowerksPPC的编译器建筑学。了解这种组合会很有帮助,但总的来说,对于GCC和MSVC++,情况如何?堆分配的性能不如堆栈分配吗?没有区别吗

c++ - 哪个更快 : Stack allocation or Heap allocation

这个问题听起来可能相当初级,但这是我与另一位合作开发者的争论。我一直在尽可能地堆栈分配东西,而不是堆分配它们。他一边跟我说话,一边看着我,并评论说没有必要,因为它们在性能方面是相同的。我一直认为堆的增长是恒定的时间,堆分配的性能取决于堆的当前复杂性,用于分配(找到适当大小的孔)和取消分配(折叠孔以减少碎片化,因为如果我没记错的话,许多标准库实现在删除期间需要时间来执行此操作)。这让我觉得可能非常依赖编译器。特别是对于这个项目,我使用的是MetrowerksPPC的编译器建筑学。了解这种组合会很有帮助,但总的来说,对于GCC和MSVC++,情况如何?堆分配的性能不如堆栈分配吗?没有区别吗

dlopen: cannot load any more object with static TLS问题解决

项目在windows操作系统正常运行,但是在linux操作系统运行报错dlopen:cannotloadanymoreobjectwithstaticTLS,报错图如下:错误提示字面意思无法通过线程局部存储加载更多的对象。错误原因:主要出现在pythonimport导入库的顺序问题,可能出现在import各种python库时,由于代码中写的import顺序导致报这个错。如我的项目中是在importpaddle时报的错,但是修改代码中import的顺序时问题无法解决,这个时候就应该考虑是库版本相关的问题,在引用的库中加载的其他库顺序问题导致,因此无法在代码中修改相关顺序,所以跟踪错误报错点cor