用const char指针分配的内存在哪里?

Jos*_*osh 6 c c++ memory

可能重复:
是否在静态内存中创建了c ++中的字符串文字?
C++字符串文字数据类型存储

在这段代码中:

const char * str = "hello world";

如果我理解正确,指针是4或8个字节,我想这将在堆栈上分配.但分配和存储"hello world"的内存在哪里?
或者究竟str指出了什么?

pad*_*ddy 15

它没有分配.它通常存储在程序的代码段或堆栈中.这取决于编译器.无论哪种方式,它都指向以null结尾的字符数组.

  • 或者在数据段中,或在"只读数据"段中,或编译器/链接器决定的其他位置是合适的. (6认同)

oua*_*uah 6

C没有堆栈或堆.C表示这"hello world"是一个字符串文字,字符串文字具有静态存储持续时间.

  • @JamesCurran:最近通过说C(或C++)没有它们来回答有关堆栈和堆的问题,它变得非常时髦.当然,这是正确的,因为标准规定自动变量和自由商店的分配不需要这样的数据结构.据推测,如果提问者已经询问字符串文字存储在"典型"实现中的位置,或者某些类型,那么将会发现一种不同的方式来忽略预期的问题. (6认同)
  • 嗯...... C有堆栈和堆(好吧,大多数实现都有). (3认同)
  • @JamesCurran:那是因为C#是一个单一供应商的产品,MS本质上可以说"我们的实现*定义*语言"(如Perl和PHP).相比之下,C标准试图捕获跨越数十年时间和数百个实现的编译器的高级结构,并且由相对较大的人群仔细研究. (3认同)
  • @jsn - 甚至不像"实现定义"那样强烈.它可以把它们放在任何喜欢的地方,它甚至不必告诉你. (2认同)

Jam*_*ran 6

Essentailly,编译好像你写的那样:

const static char helloworld[12] 
             = {'h', 'e', 'l', 'l', 'o',' ','w', 'o', 'r', 'l', 'd', '\0'};

const char * str = helloworld;
Run Code Online (Sandbox Code Playgroud)

该数组通常位于内存的某些只读部分,可能位于可执行代码附近.

根据定义的位置,str将位于堆栈或全局内存空间中.


归档时间:

查看次数:

6189 次

最近记录:

12 年,9 月 前