컴퓨터 공학
CPU구조
- Control Unit : 매니저
- ALU : 계산
- Register : 기억
- L3 < L2 < L1 < Register, 속도 오름차순)
레지스터의 종류
- 프로그램 카운터 : 현재 실행중인 소스코드 라인의 위치 기억
→ 순차적으로 샐행된다. - 명령어 레지스터 : 현재 실행중인 명령어를 실질적으로 가져온다.
- 메모리 주소 레지스터 : 목표(타겟)
- 메모리 데이터 레지스터 : 타겟에서 가져온 데이터 or 타겟에 넣을 데이터(결과, 복사본)
- 어큐뮬레이터 : 계산값
정보의 단위
- 정보 : 데이터 + 처리
- bit : 정보의 기본 단위
- 워드 : CPU 레지스터 단위
- 16bit CPU의 워드 : 16bit
- 32bit CPU의 워드 : 16bit
→ CPU의 1워드 만큼 레지스터에서 메모리 주소 사용
❗ 32bit CPU에서는 RAM을 4GB 이상 사용할 수 없다?
- 1워드 = 32bit 이므로 2^32인 0 ~ 42억 까지 저장 가능
= CPU는 일꾼을 시켜 RAM에서 주소 레지스터에 대한 데이터를 가져오는데, 32bit CPU에는 최대 42억까지 주소 레지스터에 저장할 수 있어 RAM의 모든 용량(0 ~ 85억)이 아닌 4GB(0 ~ 42억)까지 사용할 수 있다.
C언어
변수와 메모리
- PC를 관리하는 소프트웨어 : 운영체제(OS)
- OS가 메모리를 관리한다.
- C프로그램은 운영체제의 관리하에 실행된다.
→ 프로그램은 운영체제에 메모리를 구걸하여 할당(변수는 메모리에 할당된다.) - 메모리는 크게 2개 구역으로 나뉜다.
- Heap : 객체가 있는 구역. 위 → 아래
- Stack : 지역변수가 있는 구역. 아래 → 위
- sizeOf(변수 or 자료형) : 해당 자료형의 크기(byte 단위) 출력
- 정수형
- 참고 : https://blog.naver.com/kji9653/221913097313
- unsigned : 부호를 없애 표현
ex) short : -32768 ~ 32767 까지 표현 가능
unsigned short : 0 ~ 65535 까지 표현 가능 - 실수형
참고 : https://m.blog.naver.com/kji9653/221915460675 - 포인터
- 참고 : https://blog.naver.com/linuxdude/120004505419
- 메모리는 항상 부족하다 → 모든 최적화, 모든 기교는 메모리를 최대한 효율적으로 사용하도록 발전 - 스택
- 지역변수는 스택에 저장한다.(method parameter도 스택에 저장)
- FILO(First In Last Out) 구조
❗스택으로 쌓는 이유
- 낭비되는 메모리를 최소화 하기 위해
- 힙
- 완전 이진트리의 일종
- 객체를 저장하는 위치
- 사용자가 직접 관리하는 메모리 영역
참조 : https://yaboong.github.io/java/2018/05/26/java-memory-management/
JAVA
Java 시작
- class명은 대문자로 시작
public class Main {
- class : 원본 폴더, 설계도
- 객체 : 복제 폴더, 제품
Car car1 = new Car();
- 자바는 클래스(설계도)가 필수! but 자바스크립트는 설계도 없이 객체 생성 가능
- 기본 자료형 변수에 객체를 넣을 수 없다.
- 하지만, 어떻게는 객체를 넣어보려 시도는 해본다.
int a = new Car(); // (x)
- 예시 코드
public class Main {
public static void main(String[] args) {
Car car1 = new Car();
Car car2 = new Car();
car1.max_speed = 100;
car2.max_speed = 200;
System.out.println(car1.max_speed);
System.out.println(car2.max_speed);
}
}
class Car {
int max_speed;
}
- class는 Code영역(Read Only)에 저장된다. (= 원본)
- Heap(Read, Write)에 객체로 가져올 경우 클래스에 있는 변수를 수정할 수 있다.
→ class의 복제 폴더 생성 - class 내에서만 변수를 선언할 수 있고, 각 객체마다 해당 변수의 값을 지정할 수 있다.
❗변수 값은 class의 변수를 직접 수정하는 것 X
→ class에서 생성된 text파일까지 함께 복사하여 각 text파일의 내용 수정 가능 - class내의 method는 실행파일과 같다.
→ method의 내용을 수정할 수 없고, “실행” or “실행하지 않음” 만 선택할 수 있다.
this
- 객체를 조종하는 리모콘 역할
- 객체를 heap에 복제했을 때 리모콘도 함께 복제된다.
Car car1 = new Car();
// new Car()로 객체 리모콘 생성
// Car car1 = new Car(); 로 객체 리모콘을 car1에 복제
// 총 2개의 리모콘 생성
- 예시 코드
public class Main {
public static void main(String[] args) {
Car car1 = new Car(100);
Car car2 = new Car(200);
car1.max_speed = 100;
car2.max_speed = 200;
}
}
class Car {
public Car(int max_speed) {
this.max_speed = max_speed;
}
int max_speed;
}
자바의 2가지 변수 타입
- 일반 : byte, short, char, boolean, float 등…
- 레퍼런스 : 그 외 나머지 변수 타입
int a = // 일반 변수 타입
Car car1 // 레퍼런스 변수 타입
'멋쟁이 사자처럼 BE School' 카테고리의 다른 글
[멋쟁이사자처럼 Back-End School 1기] Day 9. 포인터, Git, GatsBy (0) | 2022.06.27 |
---|---|
[멋쟁이사자처럼 Back-End School 1기] Day 8. 포인터, Git, Linux명령어, Java실습 (0) | 2022.06.24 |
[멋쟁이사자처럼 Back-End School 1기] Day 6. C언어 함수, FLEX, DOM, BOM, JQuery (0) | 2022.06.22 |
[멋쟁이사자처럼 Back-End School 1기] Day 5. CS, 조건문, 실습 (0) | 2022.06.21 |
[멋쟁이사자처럼 Back-End School 1기] Day 4. CS, HTML/CSS 활용 (0) | 2022.06.20 |