cとc++ダイナミックメモリ開発&newnamespace
3726 ワード
cで動的にメモリ領域を開く:
malloc関数プロトタイプvoid*malloc(size_t size); size_t-----符号なしオペレーティングシステム----カーネル駆動----ハードウェア
void*は半開半閉区間で、ダイナミックメモリの開始アドレスしか知らないが、いつ終わるか分からない.
void free(void*ptr)/freeはfreeの空間サイズを指定する必要がなく、free()の場合はカーネルに格納されているヘッダアドレスと比較し、一致すればアドレスが合法であることを証明し、解放することができる.
int*p=(int*)malloc(1)は1バイトのアドレス空間を強制的にintに変換し、実際には1バイトの空間しかなく、使用時に限界を招く
C++動的にメモリ領域を開く:
メモリ用newキーワードを開き、メモリ用Deleteを解放する
int*p=new int//スペースサイズを指定する必要はなく、コンパイラによってサイズが制御されます
int *p=new int(10);//pは値10のint数を指す
int *p = new int[10];//動的整数配列を申請します.配列の長さは[]の値です.
义齿
新開発のメモリ領域をフリーストレージ領域と呼ぶ
new/malloc new:フリーストレージ領域1、newフリーストレージ領域で開くmallocスタック上で開く2、new戻りタイプセキュリティ(必要なメモリを直接処理する)malloc戻りタイプセキュリティ3、newメモリオープンのサイズを計算する必要がないmallocメモリオープンのサイズを計算する必要がある4、new放出異常(bad_alloc)mallocはNULL 5を返し、newはmallocを初期化して単純にメモリを開くことができる
グローバル役割ドメインローカル役割ドメイン名前空間役割ドメイン同名:クラス役割のマージ
malloc関数プロトタイプvoid*malloc(size_t size); size_t-----符号なしオペレーティングシステム----カーネル駆動----ハードウェア
void*は半開半閉区間で、ダイナミックメモリの開始アドレスしか知らないが、いつ終わるか分からない.
void free(void*ptr)/freeはfreeの空間サイズを指定する必要がなく、free()の場合はカーネルに格納されているヘッダアドレスと比較し、一致すればアドレスが合法であることを証明し、解放することができる.
int*p=(int*)malloc(1)は1バイトのアドレス空間を強制的にintに変換し、実際には1バイトの空間しかなく、使用時に限界を招く
C++動的にメモリ領域を開く:
メモリ用newキーワードを開き、メモリ用Deleteを解放する
int*p=new int//スペースサイズを指定する必要はなく、コンパイラによってサイズが制御されます
int *p=new int(10);//pは値10のint数を指す
int *p = new int[10];//動的整数配列を申請します.配列の長さは[]の値です.
int main()
{
int* p = new int(10);//p 10
delete p;
int*cp = (int*)malloc(sizeof(int)* 10);//malloc ,
free(cp);//
int* cppp = new int[10](0);//new , 0
delete[] cppp;//
//int arr[10][10];//int* int(*)[10]
int**parr = (int**)malloc(sizeof(int*)* 10);//malloc
for (int i = 0; i < 10; i++)
{
parr[i] = (int*)malloc(sizeof(int)* 10);
}
for (int i = 0; i < 10; i++)//
{
free(parr[i]);
}
free(parr);
int** cpparr = new int*[10];//new
for (int i = 0; i < 10; i++)
{
cpparr[i] = new int[10];
}
for (int i = 0; i < 10; i++)//
{
delete[] cpparr[i];
}
delete[] cpparr;
double* pd = new double(10);
delete[] pd;
const int* cp1 = new const int(10);// ,
//const int* cparr = new const int[10](0);// , 0
delete cp1;
义齿
int main()
{
int *q= new int;
char *q=new(q)char('a');// 4 1 'a'
return 0;
}// q P
新開発のメモリ領域をフリーストレージ領域と呼ぶ
new/malloc new:フリーストレージ領域1、newフリーストレージ領域で開くmallocスタック上で開く2、new戻りタイプセキュリティ(必要なメモリを直接処理する)malloc戻りタイプセキュリティ3、newメモリオープンのサイズを計算する必要がないmallocメモリオープンのサイズを計算する必要がある4、new放出異常(bad_alloc)mallocはNULL 5を返し、newはmallocを初期化して単純にメモリを開くことができる
グローバル役割ドメインローカル役割ドメイン名前空間役割ドメイン同名:クラス役割のマージ
#include
#include // std
using namespace std;
namespace CY1207
{
int a = 10;
int Sum(int a, int b)
{
std::cout << "namespace CY1207" << std::endl;
return a + b;
}
}
int Sum(int a, int b)
{
cout << "global" << endl;
return a + b;
}
int main()
{
Sum(10, 20);//
return 0;
}
namespace CY1207
{
int a = 10;
int Sum(int a, int b)
{
std::cout << "namespace CY1207" << std::endl;
return a + b;
}
}
int main()
{
using CY1207::Sum;//using using
//using namespace CY1207;//using using
Sum(10, 20);
//int b = a;
return 0;
}
namespace CY1207
{
int a = 10;
int Sum(int a, int b)
{
std::cout << "namespace CY1207" << std::endl;
return a + b;
}
}
int main()
{
//using CY1207::Sum;//using using
using namespace CY1207;//using using
Sum(10, 20);
int b = a;
return 0;
}
#include//
#include // std
using namespace std;
namespace CY1207
{
int a = 10;
int Sum(int a, int b)
{
std::cout << "namespace CY1207" << std::endl;
return a + b;
}
}
namespace CY1207
{
int a = 10;
int b = 10;
}
//int Sum(int a, int b)
//{
// cout << "global" << endl;
// return a + b;
//}
int main()
{
//using CY1207::Sum;//using using
using namespace CY1207;//using using
Sum(10, 20);
int b = a;
return 0;
}