2009-11-06 26 views
5

Giả sử tôi đã bắt đầu chuỗi mới với pthread_create() và sau đó tách nó ra bằng cách sử dụng pthread_detach(). Bây giờ, từ trong phạm vi ngữ cảnh luồng, tôi đã cấp phát một số bộ nhớ bằng cách sử dụng malloc().Có thoát khỏi bộ nhớ được phát hành nhanh không?

Khi thoát khỏi chủ đề, bộ nhớ malloc'ed có được tự động giải phóng không?

Trả lời

8
  • Chủ đề chia sẻ tài nguyên bộ nhớ (ít nhất POSIX).
  • malloc()/realloc()/free() quản lý bộ nhớ không thực sự nhận biết về các chủ đề (ít nhất là bây giờ).
  • Vì vậy, bạn nên xem kết quả của malloc() là 'tài nguyên' đơn giản. Nó không liên kết chuỗi.

Vì vậy, bây giờ câu trả lời phải rõ ràng, mọi bộ nhớ được phân bổ không có liên kết đến chủ đề để nó không phải là miễn phí() 'd về thoát khỏi chuỗi. Tất nhiên bạn có thể cung cấp một số xử lý đặc biệt cơ học nhưng nó không được thực hiện tự động. Một mặt tốt của điều này là bạn có thể vượt qua sự phân bổ bộ nhớ giữa các luồng nói cách khác phân bổ tài nguyên đó trong một luồng và sau đó giải phóng tài nguyên đó khỏi một luồng khác (có tốt cho bạn hay không).

Hy vọng đây sẽ là giải thích hữu ích, hãy suy nghĩ về con trỏ bộ nhớ được cấp phát như về bất kỳ trình mô tả cấp tiến trình nào.

1

Tôi khá chắc chắn nó không, bạn phải sử dụng miễn phí().

4

Bộ nhớ không có bộ nhớ malloc'ed chỉ được giải phóng bởi "miễn phí" rõ ràng.

+2

Hoặc khi toàn bộ quá trình thoát - ít nhất trên hệ điều hành máy tính để bàn/máy chủ điển hình của bạn. – nos

+0

Không khái quát. Khi các chương trình của bạn thoát, nó được giải phóng. Và kể từ đó _ever_ xảy ra .. – TimZaman

1

Không. Trong khi bất kỳ bộ nhớ malloced nào được giải phóng khi quá trình thoát, điều này cũng không đúng đối với khi thoát khỏi chuỗi.

2

Thats khá nhiều sự khác biệt giữa chủ đề và quy trình, quy trình sở hữu tài nguyên của họ như chuỗi bộ nhớ heap không. Nếu bạn muốn chức năng đó thì bạn muốn một quá trình không phải là một luồng.

Các vấn đề liên quan