C++中的Char*数组内存分配
Char * Array Memory Allocation in C++
下面是我的字符指针数组:
char *names[4] = {"abc", "def", "ghi", "jkl"};
for(int i = 0; i < 4; i++){
cout << &names[i] << endl;
}
这将打印4个内存分配:
0x7fff591c9b90
0x7fff591c9b98
0x7fff591c9ba0
0x7fff591c9ba8
我的问题是为什么它为数组中的每个元素分配8个字节?你能帮助我理解C++中如何为每种数据类型分配内存吗?例如Char*、Char、in、int*、string等,或引用任何引用。
TIA
我的问题是为什么它为大堆
可能是因为你们机器上的指针大小是8字节。在64位系统上,指针的大小通常为8字节。但这并没有硬性规定,指针的大小可能因机器而异。由于数组的每个元素都是一个指针,所以结果就是这样。
内存分配,比如说int
和int*
的不同之处在于,前者需要分配空间来容纳整数的所有值,而后者则需要同样多的空间来容纳指针的值。
char
元素的数组,以特殊字符' '
结尾。当您使用字符串文字时,它会衰减为指向该数组中第一个元素的指针。因此,制作一个由四个指针组成的数组到char
,元素大小总是指针的大小,即使该指针指向字符串文字。
在64位系统上,指针的通常大小是64位,即8个字节。这就是为什么数组中的每个元素都是8个字节。在32位系统上,指针的大小当然是32位,4个字节。
字符串文字的长度无关紧要,例如
char const* string_array[] = { "a", "bc", "def", "ghij" };
在上面的数组中,元素大小仍然是指针的大小,即64位系统上的8个字节。
相关文章:
- Win32编译器选项和内存分配
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 当需要超过16GB的连续内存时,内存分配失败
- 尝试摆脱任何堆内存分配
- 以下代码执行哪种内存分配(动态或静态)?
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么类和 main() 函数中也有动态内存分配
- 使用 NTAllocateVirtualMemory 和 GetProcAddress 的内存分配问题不起作用
- C++:矢量分配器行为、内存分配和智能指针
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- Linux C++ 中的页面对齐内存分配
- 整数内存分配/释放
- 将内存分配返回值强制转换为 TYPE 数组
- C++程序什么都不做,但瓦尔格林德显示内存分配
- 给定特定内存地址的数组的动态内存分配
- 如何完成内存分配
- 我刚刚了解了C++中的动态内存分配
- 在先前调用 string::find 后添加内存分配和内存集会导致它返回 npos.为什么?
- 对于堆上的页面对齐内存分配是否有任何优化或不同的 API?
- 无法删除布尔动态内存分配