强制在堆栈中而不是全局分配 char[] (string)

force allocate char[] (string) in the stack instead of global

我试图强制编译器在堆栈中分配内联字符串: 此代码分配 .rdata 部分中的字符串:

foo("test");

虽然此代码在堆栈中分配字符串:

char szt1[] = "test1";
foo(szt1);

这正是我想要强制的。

如何强制编译始终在堆栈中分配数组? 我正在使用 gcc。

谢谢

没有好的方法可以做到这一点,并且可能没有太多好的理由需要这种行为。

如果您不希望该字符串存在于数据段中,最接近的做法是分配一个 char 的自动数组并将字符分配给它,一次一个。

char hello[6] = {};
hello[0] = 'h'; hello[1] = 'e'; hello[2] = 'l'; hello[3] = 'l'; hello[4] = 'o';

单线是foo(std::string("test").c_str());

好的,从技术上讲,您不知道小字符串优化会启动,但 OTOH,您甚至不知道是否存在常规堆栈。