gpt4 book ai didi

c++ - "hard-coding"和传入有关内存的参数有什么区别?

转载 作者:行者123 更新时间:2023-11-30 02:53:05 26 4
gpt4 key购买 nike

所以标题是我的问题。在内存中,参数可以位于堆栈或堆上,具体取决于它们的初始化方式,但是如何处理硬编码信息?

例如,我将使用 ifstream 的构造函数

这有什么区别:

void function(){

ifstream infile("home/some/file/path");

}

对比

void function(char* filePath){

ifstream infile(filePath); //filePath points to a character array which contains home/some/file/path

}

使用其中一个是否会产生任何内存影响? (如果 char* 未正确释放,多线程可能会导致堆损坏?等等)。

我只是想了解差异和可能的影响,以便我可以将答案应用于更大的问题。欢迎所有见解,如果我做出了任何不正确的陈述/假设,请随时纠正我!

最佳答案

文字(这是您的第一个示例显示的内容)被放入可执行文件的静态初始化部分(这就是为什么,如果您在 *Nix 系统上),您可以使用命令 strings 并获取应用程序中所有文字的列表。

你的第二个例子实际上应该修改为

void function(const char* filePath) { ... }

除非你要修改函数中的指针。该函数的内存可以来自任何地方(传递给函数的字符串文字、应用程序中其他地方声明的常量字符串、存储在内存中并从命令行或控制台输入的字符串等)

您在这里使用多线程时遇到的主要问题是,如果 2 个以上的线程试图同时加载同一个文件。如果他们都在读它可能没有问题,但是如果你有一个线程想写它并获得文件的独占锁,其他线程就会死锁。不过,这与您的字符串问题没有直接关系。

关于c++ - "hard-coding"和传入有关内存的参数有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18321822/

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