스택(Stack), 힙(Heap), 데이터(Data)영역 기본 소개
출처: https://dsnight.tistory.com/50 [Development Assemble]
main함수 호출전 할당. 프로그램 실행동안 계속 실행
매개변수도 stack임.즉 매개변수도 메모리 잡아먹는다는 말.
출처: https://dsnight.tistory.com/51 [Development Assemble]
뜻: malloc : memory allocate, calloc : clear allocate, ralloc : re allocate
Call by Value vs Call by Referrence vs Call by Sharing inJS,
and (+ call by address) in C++
JS 에서는 자료형이 원시일경우 call by value로 함수에 주고, 참조형일경우
call by reference로 c++과 여기까진 같다. 근데 함수 내에서 test={a:'함수밖과 다른값'}
처럼 다른값으로 재 할당 이 일어날 경우 주소값을 아예 다른 값, 재할당 되는 값으로 변경된다(이 말은 함수 밖에 참조 된 변수에게 영향을 주지 않는다는 뜻 ) - call by sharing이란 개념임.
https://perfectacle.github.io/2017/10/30/js-014-call-by-value-vs-call-by-reference/
https://blueshw.github.io/2018/09/15/pass-by-reference/
c++
https://m.blog.naver.com/winterwolfs/10159106800
사용법 : https://aossuper8.tistory.com/3?category=668513
string은 마지막에 \0 널문자를 저장하므로 HI! 를 string s 에 할당하면 실제로 +1 byte 되서 4byte이다.
http://mahru.co.kr/Computer_tip/13388
-cpu
1Ghz = 1,000MHz
-해상도
해상도(19201080), 색표현력(8bit), 주사율(60hz) 인 모니터의 경우
한번에 19201080 = 2,073,600 개의 픽셀을 그리며
각 픽셀은 8bit 서브픽셀 3 개(R,G,B) = 24bit 의 색상을 표현할 수 있다.
그리고 1 초에 60 번 화면을 그릴 수 있으므로
1 초에 1920 1080 24 * 60 개의 bit 를 처리 하여 화면을 표현한다.
마크다운 포맷을 무시하고 특수문자를 사용하려면 '\' 기호를 사용한다
ex) \
printf f는 format뜻함.
clang hello.c
같이 실행하면 a.out
생기는데 binary file임 기계어, 어셈블리어
문자열은 문자 배열.
메모리.
16진수 FF 가 왜 255(10진법)이냐면,
16진수의 두번째 자리는 16의 1승이고, 첫번째 자리는 16의 0승이다.
따라서 1,2,3,4...9,A,B,C..F 에서 F는 16진수의 15번째 숫자니까
FF = (15x16^1) + (15x16^0)가 되는데
= 240 + 15 = 255
10진수랑 16진수랑 표기가 헷갈리니까
0x prefix를 두기로 함 ex)0xFF
& 가 ~의 주소를 달라는 연산자라면(주소 묻기)
*는 반대로 그 주소로 가줘! 라는 의미다.(주소로 가기)
https://www.boostcourse.org/cs112/lecture/119027
문자열
실제 string은 typedef char *string
이런식으로 생겨서
string s == char *s 같다.
위의 strlen와 strcpy는 #include <string.h>
인클루드로 갖고 와야 하며, strlen은 길이(길이 재니까 동적 크기 변수 생성 가능), strcpy는 string 복사. 현재 소스는 t 포인터가 heap에 메모리 할당malloc(여기선 문자 갯수 + null이니까 1해줘야함) 으로 해서 s를 복사 당하고 있다.
(malloc() 쓰면 맨 밑에 free(t)//동적메모리해제 해줘야 겠지..)
valgrind ./memory.c
memory.c 파일 메모리 누수 및 문법 검색
help50 valgrind ./memory.c
좀 더 쉽게 보여줌
gcc, Clang 다 같은 컴파일러. gcc vs clang 질문은 누가 아우디가 좋냐 벤츠가 좋냐랑 똑같은 물음이라고..
함수에 인자를 전달할 때, 그 값을 복사해서 전달함.
![]
int tmp = *a;
여기서 는 그주소로 가라는 겁니다.
따라서 아래 로직에서 swap() argument : 전달인자 (parameter:매개변수는 함수 정의시 ()안에 변수들이라 한다. 차이가 있다 한다) 에 저런식으로 주소값을 던지고, 파라미터에서 point로 받아서 포인터 변수를 사용(보유한 주소값에 가!서 작동해!) 해야 swap에서 exchange한게 실제 주소값에 반영 된다고(=참조해 적용된다고) 한다.
C도장
https://dojang.io/mod/page/view.php?id=358
빅엔디언은 데이터를 byte로 쪼갰을때, 높은자리의 수~낮은자리.. (highByte) (lowByte) 순으로 정렬. JAVA나
UNIX 계열의 cpu에서 사용.
리틀엔디언은 데이터를 byte로 쪼갰을때, 낮은자리의 수 ~ 높은 자리.. (lowByte)(highByte) 순으로 정렬.
대부분AMD Intel cpu에서 사용함. 대체적으로 리틀엔디언 사용한다고 보면 됨.
https://blog.naver.com/tipsware/221233872040
잘나옴 읽어보기 (ToRead)
https://jhnyang.tistory.com/226
Arduino에서 highByte(value) 사용시 value의 highByte를 리턴.
lowByte(value) lowByte를 리턴.
함수 사용하지 않을땐
나누기
low=input & 0xff
high=(input>>8) & 0xff
합치기
input=low | (high<<8).
출처
오프셋이란 ‘어떤 기준 번지에서부터의 상대적인 거리’라는 뜻이다. 주로 포인터와 함께 사용되며 포인터가 가리키는 시작 번지(Base)에서부터 얼마나 떨어져 있는가를 표현할 때 오프셋이라는 말을 쓴다
http://soen.kr/project/dangeun/dg1/3-2-2.htm
Buffer 사용해서 받는다.
ex) buf.readInt
"폴링(polling)이란 하나의 장치(또는 프로그램)이 충돌 회피 또는 동기화 처리 등을 목적으로 다른 장치(또는 프로그램)의 상태를 주기적으로 검사하여 일정한 조건을 만족할 때 송수신 등의 자료처리를 하는 방식을 말한다."
폴링의 문제점
1. 폴링의 주기가 짧으면 서버의 성능에 부담이 간다.
2. 주기가 길면 실시간성이 떨어진다.
우아한 Tech 간략 설명 : Web Socket
https://www.youtube.com/watch?v=MPQHvwPxDUw
우아한형제들 실시간 서비스 구축 webSocket(난이도 상)
https://woowabros.github.io/woowabros/2017/09/12/realtime-service.html
Nextree
https://www.nextree.co.kr/p7292/
node.js에서 global로 선언하는 2가지 방법
https://lahuman.github.io/nodejs_global/
goorm에 무료 강좌 많음.
https://edu.goorm.io/lecture/557/%ED%95%9C-%EB%88%88%EC%97%90-%EB%81%9D%EB%82%B4%EB%8A%94-node-js
외부IP에서 내 컴퓨터(내부 IP)로 접속하기
https://studyforus.tistory.com/27
str.length;
문자열 길이
.join(' ');
배열 문자열로 합치기 (지금껀 공백기준으로 합침)
.split(' ')
문자열 배열로 나누기(지금껀 공백기준으로 배열 나눔.)
https://velog.io/@surim014/JavaScript-%ED%95%A8%EC%88%98
함수표현식으로 정의된 함수는 런타임시에 해석되고 실행이 된다.
// 기명 함수표현식(named function expression)
var company = function company() {
/ 실행코드 /
};
Flash Memory 사용해서 SRAM 메모리 확보하는 법
https://juahnpop.tistory.com/120
How to use external RAM on an ESP32? / 외부 RAM 사용법
https://arduinojson.org/v6/how-to/use-external-ram-on-esp32/
esp32 spec, 전압별 비선형 데이터임.
https://randomnerdtutorials.com/esp32-adc-analog-read-arduino-ide/
체크후 코드 확인 취소
https://www.sparkfun.com/news/1552
serializeJson(root, charArray)
사용시 윗처럼 던져야 함. 밑에것이 아니라..
https://github.com/bblanchon/ArduinoJson/issues/869
tcp socket speed 10Mbps only. How can I speed up?
https://www.esp32.com/viewtopic.php?t=839
NodeJS와 소켓 통신 연결 (NodeJS UDP & TCP Example)
https://kimyc1223.github.io/2019-11-27-HoloLens004/
Packet Sender - TCP, UDP Socket 통신 프로그램 개발시 유용한 테스트 프로그램입니다.
출처: https://bigenergy.tistory.com/723 [빅에너지™]
와이어샤크 사용법
https://run-it.tistory.com/49
네트워크 기본 기술노트 알렉스
https://www.youtube.com/watch?v=65h9uxHKGPk
TCP 정확한 데이터 전달,
UDP 손실또한 고려, 속도전.
압축 무손실-> zip
손실->mpeg 영상..
www.naver.com 같은 영어는 컴터가 모르니 DNS서버로 가서 ip 로 숫자로 변환시켜 알려줌.
그래서 목적지까지 가게해주는게 IP, 데이터를 전달해주는게 TCP, 그래서 TCP/IP라고 함.
IP를 찾아가는 경로를 라우팅이라 함. 라우터란 장비가 있음. 전달을 위한 목적.
IPv4, IPv6
NAT.
private IP: 보안상 좋음. 내부아이피겠지.
NAT장비가 private IP를 public IP로 전환을 해줌.
4가지만 일단 알아라.
-ipconfig : 내 ip
-ping : ping 상대방ip 치면 상대방 ip가 살아있으면 response를 해줌. 무한으로 보내면 DDOS공격
-tracert : 어떤 URL을 주면 라우팅 정보를 알려줌.
-nslookup : 해당 도메인의 ip를 응답시켜줌. 즉 상대 ip 알려줌.
이더넷이란: 규격 규약. 물리적 하단에 있는 접속과 관련된 통신 기술.
허브 : 외부에서 통신이 들어오면 브로드캐스팅을 통해 내부로 다 쏴줌.
HTTP, HTTPS: S가 secure 뜻. 암호화.
HTTPS면 전달하는 상황에서 암호화를 하고 받을때 복호화를 해줌.
전자 서명:이 데이터가 원본 데이터야 라는 걸 증명하는 과정
전자 인증:내가 해당하는 사용자야! 라는걸 증명하는 과정.-기관
Hash화, table.. 해쉬는 주민번호 등을 암호화, 복호화 하는 개념이 아닌 즉 암호걸었다 바꿨다 할수 없이
그냥 특정 값으로 떨어져버리게 만드는 것. 그래서 이 값이 정확한지만 알고 끝.
◆홈네트워크기초◆ TCP UDP 차이점과 공유기의 포트포워드, DMZ 개념이해
https://www.youtube.com/watch?v=ePbatYX_ppo
포트포워딩은 외부에서, 공인 IP에 특정한 포트를 바로 내부 사설 IP로 연결해주는 걸 뜻함.
외부포트 : 공인 IP주소의 포트.. 주로 쓰는거.
내부포트 : 공유기가 만들어낸 사설 IP의 포트를 말함.
공유기 설정에서 DMZ란?
공유기는 그 자체로 방화벽 기능을 하는데, 그 기능을 무력시키는게 DMZ
모든 외부포트와 모든 내부포트를 1:1로 매칭