相邻阵列的内存分配
Memory Allocation with Adjacent Arrays
我在C中摆弄两个数组,试图让其中一个入侵另一个的内存空间。作为初学者,我知道编译器会自动为示例中的数组分配内存空间,但是这些内存地址是如何选择的呢?例如,在下面的代码中(由我的浏览器在 c++.com 网站上编译),数字 [] 和 stealth[] 的地址分别是:
0x75fbb51092c0
0x75fbb51092b0
我计算出相隔 16 个字节。这是某种安全措施,以便一个阵列不会进入另一个阵列的空间吗?
// more pointers
#include <iostream>
using namespace std;
int main ()
{
int numbers[5];
int stealth[1];
for (int i=0;i<6;i++){
if (i==0){
stealth[i]=9;
}
else {
numbers[i]=i;
}
}
int * a;
// b=numbers;
a=numbers;
cout << "value at 0 index for numbers: "<< *a << endl;
cout << "address: " << a << endl;
a=stealth;
cout << "value at 0 index for stealth: "<< *a << endl;
cout << "address: " << a << endl;
return 0;
}
++++ 编辑 ++++ 感谢您的输入。经过一些进一步的测试,我将指向数组的指针设置为整数的位置。然后我遍历数组并打印出每个索引值的内存地址。然而,数组开头的索引的地址与之前设置为整数的地址不同。知道为什么吗?我在下面粘贴了新代码和输出:
// more pointers
#include <iostream>
#include <string>
using namespace std;
int main ()
{
int numbers[5]={1,2,3,4,5};
int alien=6;
int * a;
int * b;
b=numbers;
a=&alien;
b=a;
cout << "address of start of array numbers: " << b << endl;
cout << "address of alien: " << a << endl;
for (int i=0;i<5;i++){
cout << &numbers[i] << endl;
cout << numbers[i] << endl;
}
return 0;
}
输出
address of start of array numbers: 0x79ab503a591c
address of alien: 0x79ab503a591c
0x79ab503a5920
1
0x79ab503a5924
2
0x79ab503a5928
3
0x79ab503a592c
4
0x79ab503a5930
5
您在堆栈上分配的任何变量(联合除外)都将有自己的存储,这是语言的保证。地址部分由编译器选择,但主要由操作系统选择。地址的较高部分(数量因系统而异,但通常至少0x1000)将由操作系统选择,整个较低的部分将取决于编译器。
让数组侵入不同变量占用的空间的唯一方法是,如果您要弄乱指针,并且其中许多操作会导致未定义的行为。
相关文章:
- Win32编译器选项和内存分配
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 当需要超过16GB的连续内存时,内存分配失败
- 尝试摆脱任何堆内存分配
- 以下代码执行哪种内存分配(动态或静态)?
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么类和 main() 函数中也有动态内存分配
- 使用 NTAllocateVirtualMemory 和 GetProcAddress 的内存分配问题不起作用
- C++:矢量分配器行为、内存分配和智能指针
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- Linux C++ 中的页面对齐内存分配
- 整数内存分配/释放
- 将内存分配返回值强制转换为 TYPE 数组
- C++程序什么都不做,但瓦尔格林德显示内存分配
- 给定特定内存地址的数组的动态内存分配
- 如何完成内存分配
- 我刚刚了解了C++中的动态内存分配
- 在先前调用 string::find 后添加内存分配和内存集会导致它返回 npos.为什么?
- 对于堆上的页面对齐内存分配是否有任何优化或不同的 API?
- 无法删除布尔动态内存分配