: 내가 OOP를 이해하는 측면에서 매우 유익한 발견 한 것은 객체 지향 일반 C에서 이것은 C의 지식을 요구하는 코딩했다. 지금부터는 C를 거의 독점적으로 쓰고 있습니다. 왜냐하면 저는 밑에서부터 일하고 있기 때문입니다. 나는 대학에 가기 전에 죽일 시간이 많아서 시작하기 전에 소프트웨어 아키텍처에 능숙 할 수도 있습니다. 그것은 (어떤 경우에는) 더 높은 수준의 개념을 배우기 쉽고, 문제 해결 능력을 향상시킵니다. 내가 더 젊었을 때 나는 PHP와 VB6를 배웠습니다. 내가 C와 어셈블리로 이동했을 때, "문자열"이 단일 값이 아니라 단일 값의 배열이라는 것을 파악하는 가장 어려운 일은 - 그리고 나는 하나를 다른 것과 비교할 수 없었습니다. 각 문자 배열을 횡단하여 차이점을 찾아야했습니다. 그런 작은 것들이 나를 다시 생각하게하고 컴퓨터가 실제로 어떻게 작동하는지 다시 배웠습니다. 내 말은, 내가 문자열에 관한 것을 발견하기 전에, 나는 프로세서 레지스터가 전혀 쓸모 없다고 생각했다. (32 비트로 유용한 것을 어떻게 넣을 수 있을까?).
즉, 나는 결코 당신이 그것을 사용하지 않을 것이라는 사실에도 불구하고 저레벨 프로그래밍을 배우는 잠재적 이점에 대해서 놀림을 피할 수 있습니다. 그러나 나에게있어, 내가 어떤 이유를 생각해 내는지에 상관없이, 그것은 대부분 일반적인 관심사를위한 것이다. 나는 C가 재미 있다고 생각합니다. 그리고 그걸로 더 많이 성취할수록 내 기술에 대해 더 잘 느낍니다. 스택 오버 플로우, 계산 수학, 낮은 수준의 메모리 관리 (잘못된 포인터 또는 널 포인터, 힙 손상 및 조각화 등)와 같은 것을 학습하는 데 많은 관심을 가지지 않는다면 은 정말입니다. 하지만 너는 그럴지도 모른다.
아키텍처에 대해 배우려면 C를 배우십시오. 실제적으로 내용이 인 경우이 작동 할 수도 있습니다. 필자는 종종 어셈블리 코드를 컴파일하여 컴퓨터가 실제로 수행 할 작업을 실제로 처리하는 방법을 확인합니다. 각 작업에 대해 수행 된 각 개별 단계를 확인합니다. 사실, 그게 내가 char *a = "a string"
과 char a[] = "a string"
의 차이점을 알아내는 방법입니다. 그러나 당신에게 가장 유익한 것은 통증이없는 더 높은 수준의 언어가 실제로 얼마나 고통 스러운지를 깨닫는 것입니다 : P.
레코드의 경우 각 프로세스에 호출 스택이 제공됩니다. 미리 결정된 크기의 메모리 블록입니다. 주로 로컬 변수에 사용됩니다. 지역 변수를 만들 때마다 스택의 내용이 스택의 끝에 추가되고 함수가 반환되면 (그리고 변수가 범위를 벗어나면) 해당 데이터가 다시 제거됩니다. 스택 오버플로는 스택 끝에 너무 많은 내용이 추가되고 미리 할당 된 메모리 공간을 오버런 할 때 발생합니다. 이것은 대개 HUGE 객체를 스택에 넣거나 너무 많은 재귀 (자신을 호출하는 함수)의 결과입니다. 또한 함수 호출에서 함수 호출이 너무 복잡해 졌는지 추측합니다.이 호출은 기본적으로 재귀 호출과 동일합니다 (이 경우).
아직 많은 것을 배워야합니다. PHP 또는 Python에서 스택 오버플로가 발생할 수 있습니다. PHP에서 결코 발견 할 수 없지만 C에서는 빈번한 오류가 세그먼테이션 오류입니다. – Ksempac
네,하지만 제 기억 관리 때문이 아닙니다. –
진정으로 깊은 이해를 원한다면 x86 어셈블리 언어를 배우거나 최소한 그걸 가지고 놀아야합니다. – toto