간단한 구구단 코드를 만들어 봅시다.

for i in range(1, 10):
    for j in range(1, 10):
        print(f"{i} x {j} = {i*j}")
    print("----------")
  • for i in range(1, 10): - 이 부분은 "for" 루프를 시작하는 부분입니다. 여기서 "i"는 반복 변수로, range(1, 10) 함수에 의해 제공되는 숫자의 시퀀스를 순회합니다. 이 함수는 첫 번째 인수에서 시작하여 두 번째 인수보다 하나 작은 숫자까지의 범위를 생성합니다. 그러므로, 이 루프는 i가 1부터 9까지를 반복합니다.
  • for j in range(1, 10): - 이것은 "중첩된 for 루프"라고도 불립니다. 첫 번째 루프의 각 반복에 대해, 이 두 번째 루프는 j가 1부터 9까지 반복합니다. 이런 식으로, 모든 i와 j의 조합을 한 번씩 실행하게 됩니다.
  • print(f"{i} x {j} = {i*j}") - 이 줄은 문자열을 화면에 출력합니다. 파이썬의 f-string 문법을 사용하여 i, j, 그리고 i*j의 값을 동적으로 문자열에 포함시킵니다.
  • print("----------") - 이것은 각 구구단이 끝나면 출력되는 구분선입니다. 이는 각 숫자의 구구단 사이를 구분하기 위한 것입니다.

각 단계가 어떻게 작동하는지 이해하는데 어려움이 있으면 언제든지 질문해주세요!






 

'python' 카테고리의 다른 글

Python FTP TLS implicit  (0) 2022.09.24
How do I add comments to JSON ?  (0) 2022.09.24
Python package install ( offline )  (0) 2022.09.24
Python Install ( linux )  (0) 2022.09.24
BINARY
( 고정 DATA )
CODE
DATA
가변 DATA BSS
DATA
HEAP
...
STACK

컴파일을 하고, 생성되는 BINARY에는 CODE(CPU가 어떻게 동작해야하는지 기술)와 DATA가 저장되어 있습니다.

DATA의 경우에는 위의 table에 보면 2개가 존재합니다. BINARY DATA를 가변 DATA로 복사를 진행합니다. Section copy를 하는 이유는 특정 변수값이 초기화가 되어 있어야 하는데 해당 초기 값은 BINARY에 있어서 입니다. 초기값이 있지만, 변수, 수정 가능해야 하기 때문에, DATA 영역으로 복사를 해서 사용하는 것입니다.

 

프로그램의 메모리 관리에는 HEAP, STACK, BSS 영역, DATA 영역이 있습니다. 각각의 영역은 다른 목적과 특성을 가지고 있습니다.

  1. STACK: STACK은 지역 변수와 함수 호출에 관련된 정보를 저장하는 영역입니다. STACK은 LIFO(Last In First Out) 데이터 구조로 동작합니다. 함수가 호출될 때마다 해당 함수에 필요한 지역 변수, 매개 변수, 복귀 주소 등이 STACK에 할당되며, 함수가 종료되면 그 정보들은 STACK에서 제거됩니다. STACK은 컴파일러가 자동으로 관리하며, 메모리 할당과 해제는 빠르지만 크기가 제한적입니다. 또한, STACK은 스레드 별로 별도의 STACK이 생성되며, 스레드 간에 STACK을 공유하지 않습니다.
  • 지역 변수: 함수 내에서 선언된 변수로, 해당 함수 내에서만 유효합니다. 함수가 호출될 때 STACK에 할당되고 함수가 종료되면 해제됩니다.
  • 매개 변수: 함수 호출 시 전달되는 인자 값들을 저장하는 변수로, 함수의 매개 변수로 사용됩니다.
  1. HEAP: HEAP은 동적으로 할당된 메모리를 관리하는 영역입니다. HEAP은 사용자가 직접 메모리를 할당하고 해제할 수 있으며, 할당된 메모리는 사용자에 의해 명시적으로 해제되기 전까지 계속 유지됩니다. HEAP은 크기가 동적으로 변할 수 있으며, 메모리 할당 및 해제는 비교적 느리지만, 전역적으로 접근 가능합니다.
  • 동적으로 할당된 변수: 프로그램 실행 중에 필요한 크기의 메모리를 동적으로 할당하고 사용하는 변수로, 개발자가 메모리 관리를 직접 해야합니다.
  1. BSS 영역: BSS(Block Started by Symbol) 영역은 초기화되지 않은 전역 변수와 정적 변수를 저장하는 영역입니다. 컴파일러는 BSS 영역에 할당될 변수의 크기를 미리 알고 있으며, 이 영역은 실행 파일의 크기를 줄이기 위해 0으로 초기화되지 않은 데이터를 저장합니다. 프로그램이 시작될 때 BSS 영역의 변수들은 자동으로 0으로 초기화됩니다.
  • 초기화되지 않은 전역 변수: 프로그램 전체에서 접근 가능한 변수로, 초기값이 할당되지 않아 0으로 초기화됩니다.
  • 초기화되지 않은 정적 변수: 함수 내부에서 선언되었지만 static 키워드로 정적 변수로 선언된 변수입니다.
  1. DATA 영역: DATA 영역은 초기화된 전역 변수와 정적 변수를 저장하는 영역입니다. 컴파일러는 DATA 영역에 할당될 변수의 크기를 미리 알고 있으며, 초기값이 할당된 변수들은 DATA 영역에 저장됩니다. 프로그램이 시작될 때 DATA 영역의 변수들은 초기값을 유지하며 로드됩니다.
  • 초기화된 전역 변수: 프로그램 전체에서 접근 가능한 변수로, 초기값이 할당되어 있습니다.
  • 초기화된 정적 변수: 함수 내부에서 선언되었지만 static 키워드로 정적 변수로 선언된 변수입니다.

이러한 영역들은 메모리 관리와 변수의 유효 범위에 대한 이해가 필요한 프로그래밍에서 중요한 개념입니다. HEAP은 동적으로 메모리를 할당하고 해제하는 데 사용되고, STACK은 지역 변수와 함수 호출 관련 정보를 저장하는 데 사용됩니다. 전역 변수와 정적 변수는 DATA와 BSS 영역에 저장되며 초기화 여부에 따라 다른 영역에 저장됩니다.

'etc' 카테고리의 다른 글

Function and Task dumping to FSDB  (0) 2023.06.08
AMBA protocol의 종류  (0) 2023.06.07
구구단-C  (0) 2023.06.04
move git repository with history (without gerrit)  (0) 2022.11.08
ssh autologin fail  (0) 2022.09.24

git resp를 사용하다가 다른 resp로 이동하고자 할 때 아래와 같이 작업한다.

아래의 명령어를 모두 실행하면 git commit history 또한 모두 같이 이동하게 된다.

#git clone --mirror {ORIGINAL_GIT_REPOSITORY}
# 원래 resp의 정보는 필요가 없어서 --bare 옵션으로 clone하였다.
git clone --bare {ORIGINAL_GIT_REPOSITORY}
cd {CLONE_DIRECTORY}

--mirror 옵션과 함게 clone한 디렉토리에 들어가 ls를 해보게 되면, 아래와 같이 일반적인 모습이 아니다.

raw data가 모두 다운로드 되어있는 형태라고 한다.

이제 2개의 command를 더 수행하면 완료된다.

git remote set-url --push origin {TARGET_REPOSITORY}
# git push --mirror

'etc' 카테고리의 다른 글

Function and Task dumping to FSDB  (0) 2023.06.08
AMBA protocol의 종류  (0) 2023.06.07
구구단-C  (0) 2023.06.04
프로그램의 메모리 관리 ( Heap, Stack, Bss, Data )  (0) 2023.06.03
ssh autologin fail  (0) 2022.09.24
from ftplib import FTP_TLS

class implicit_ftp(FTP_TLS):
    def __init__(self):
        FTP_TLS.__init__(self, '', '', '', '', None, None, None, 60)

    def connect(self, user, pw, timeout=-999):
        self.host = 'myhost.com'
        self.port = 990
            
        if timeout != -999:
            self.timeout = timeout

        try: 
            self.sock = socket.create_connection((self.host, self.port), self.timeout)
            self.af = self.sock.family
            self.sock = ssl.wrap_socket(self.sock, self.keyfile, self.certfile, ssl_version=ssl.PROTOCOL_TLSv1)
            self.file = self.sock.makefile('r')
            self.welcome = self.getresp()
            self.login(user=user, passwd=pw)
            self.prot_p()
        except Exception as e:
            print (e)

        return self.welcome

'python' 카테고리의 다른 글

구구단 - 파이썬  (0) 2023.06.03
How do I add comments to JSON ?  (0) 2022.09.24
Python package install ( offline )  (0) 2022.09.24
Python Install ( linux )  (0) 2022.09.24

+ Recent posts