- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我用 C++ 开始了一个项目。这种语言的内存管理对我来说是新的。
我过去常常使用 new ()
创建对象,然后传递指针,虽然它可以工作,但调试起来很痛苦,人们看到代码时会用有趣的眼神看着我。我为它没有泄漏或段错误(一旦修复)而感到非常自豪,但这确实付出了很多努力。
list users;
struct Connection * accept_connection (const char *name) {
struct Connection * new_node = new Connection ();
new_node->_data = ... // whatever, set it up here
return new_node;
}
struct Connection * new_user = accept_connection (const char *name);
users.append (new_user);
因此,我为项目的下一个版本制定了新策略。到目前为止,我所做的是使用 new ()
创建对象并为它们分配一个唯一的整数 ID 号。然后,我使用 ID 作为键将该对象存储在哈希表中。现在项目通过整数 ID 号存储和传递,当您确实需要取消引用它时,您转到哈希表,它返回给您 thing *
hoặc VÔ GIÁ TRỊ
。因此,我不再遇到指针错误,但代码速度有所降低。
typedef unsigned long ID_Number;
// create a user and return the ID
ID_Number create_user () {
ID_Number new_id = assign_unique_id ();
struct User * node = new User ();
node->_id = new_id;
node->_data = ... // whatever, set it up here
add_to_users_dict (new_id, node);
return new_id;
}
list users;
for_each (users.begin(), users.end(), process_user);
void process_user (ID_Number i) {
struct User * u_ptr = lookup_user_dict (i);
if (u_ptr == NULL) {
// not found in dict
// somehow this guy was deleted
} khác {
// we can do stuff with this guy
}
}
现在我有点熟悉编程的基本原则,但作为一个自学成才的爱好者,我不熟悉行业实践和工具。我基本上要求的是内存管理指南:
1) 我做对了什么或做错了什么?
2) 是否有任何我可以使用的包或库对我有帮助?
3) 行业的标准做法是什么?
4) 基本上我应该用谷歌搜索或为 kindle 等购买什么?
现在我通常使用 Python,它确实为我处理了很多“后端”的东西,但我需要 C 或 C++(我想我使用的是纯 C 加上 stdc++ 库,我不太确定在哪里语言之间的重叠是——我只知道 g++ 可以很好地编译它)对于这个特定项目出于速度/性能原因:尽管我怀疑一些数学天才可以提供算法修复来加速它,尽管这是一个单独的问题。
1 Câu trả lời
我能给出的最佳答案是,您不应该以传统方式使用指针。 C++11 改变了程序员处理内存管理的方式。
我不会解释那些比我聪明得多的人已经详细解释过的事情,我只会提供一些链接。
您应该首先查看 Herb Sutter 的文章 Elements of Modern C++ Style然后查看 Bjarne Stroustrup 的视频 C++11 Style
如果您能够使用新的 C++11 标准,那么它会使内存管理比以前更清晰。
关于C++ 内存管理技术/实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10705754/
Bài viết này được chia sẻ từ Cộng đồng đám mây Huawei "Đào tạo phân tán các mô hình lớn LLM", tác giả: 码上开花_Lancer. Với sự phát triển nhanh chóng của các tham số mô hình ngôn ngữ và lượng dữ liệu đào tạo cần thiết, các tài nguyên hạn chế trên một máy duy nhất không còn có thể đáp ứng được các yêu cầu đào tạo mô hình ngôn ngữ quy mô lớn. Cần thiết kế đào tạo phân tán
Bài viết này được chia sẻ từ Cộng đồng đám mây Huawei "Năm thuật toán cơ bản - Lập trình động", tác giả: Dajin (Nội Mông). 1. Các khái niệm cơ bản Lập trình động rất giống với phương pháp chia để trị. Sự khác biệt là khi giải một bài toán con, lời giải của bài toán con đó sẽ được lưu lại, còn khi giải các bài toán con tiếp theo thì có thể sử dụng trực tiếp.
pip install scp pip install pexpect Mã kiểm tra: import os import stat import paramiko # Được sử dụng để gọi lệnh scp def s
Hiện tại tôi đang triển khai dịch vụ REST "mã thông báo". Mã thông báo chỉ là một chuỗi, được xây dựng từ một số tham số, sau đó được băm và hết hạn sau một khoảng thời gian nhất định. Tôi muốn có một điểm cuối trong dịch vụ REST của mình có thể xác thực mã thông báo.
Khi bật tính năng xóa mềm, tôi thêm một bản ghi vào máy khách, đẩy, xóa bản ghi đã thêm bằng cách đẩy, sau đó thử thêm một bản ghi mới có cùng khóa chính với bản ghi ban đầu (và sau đó đẩy), tôi nhận được một ngoại lệ. Quản lý tên miền thực thể
Khi bật tính năng xóa mềm, tôi thêm một bản ghi vào máy khách, đẩy, xóa bản ghi đã thêm bằng cách đẩy, sau đó thử thêm một bản ghi mới có cùng khóa chính với bản ghi ban đầu (và sau đó đẩy), tôi nhận được một ngoại lệ. Quản lý tên miền thực thể
Tôi có một ứng dụng nhận thông tin thời tiết cứ x giây một lần. Tôi muốn lưu dữ liệu này vào một tệp XML. Tôi có nên tạo một tệp XML mới cho mỗi thông báo thời tiết hay thêm mỗi thông báo vào cùng một tệp XML không? Tôi không chắc chắn về tiêu chuẩn XML
Tôi đoán hầu hết chúng ta đều phải đối mặt với vấn đề này vào một thời điểm nào đó, vì vậy tôi nghĩ mình nên đặt câu hỏi. Khi bạn có nhiều bộ sưu tập trong BLL của mình và bạn thấy mình đang viết đi viết lại các thuật ngữ nội tuyến cũ (ẩn danh), thì việc đóng gói rõ ràng là cần thiết, nhưng cách tốt nhất để đạt được điều đó là
Tôi có một số mã C# đã chạy tốt trong một thời gian rồi... và tôi phải nói rằng, mặc dù tôi hiểu những nguyên tắc cơ bản của OO, nhưng rõ ràng có nhiều cách để giải quyết vấn đề (mặc dù tôi ghét cụm từ đó!). Vì vậy, tôi có một lớp trừu tượng cơ sở làm lớp dịch vụ dữ liệu cơ sở như sau
Tôi đang thiết kế một hệ thống cơ sở dữ liệu SQL (sử dụng Postgre) và tôi có một câu hỏi về phương pháp chung để tạo mối quan hệ/tham chiếu vẫn tồn tại ngay cả khi đối tượng được tham chiếu bị xóa. Ví dụ, có một UserORM và một Act
Mục tiêu của chúng tôi là tìm kiếm chuỗi ký tự do người dùng nhập vào và đếm xem có bao nhiêu nguyên âm trong đó. Thật không may là tôi bị kẹt ở đây, có ai giúp tôi không? def numVowels(s): nguyên âm = "AEIOUaeiou" nếu s
Tôi có một hàm xoay hoạt động trên mảng int "items" của tôi. Đoạn mã bên dưới thực hiện được điều đó, ngoại trừ việc tôi chuyển các giá trị không cần thiết. Tôi đang cố gắng thực hiện phép xoay "tại chỗ". Ý tôi là các ptrs được tăng hoặc giảm chứ không lấy giá trị từ mảng. Tôi cần phương pháp này
Tôi có một tệp json được lưu trữ trong thư mục tài liệu ứng dụng và tôi cần sử dụng nó trong tất cả các Chế độ xem của mình. Tôi đang tải json và thêm nó vào NSMutableArray trong mỗi View. Nhưng bây giờ tôi biết rằng tôi có thể
Tôi đã bắt đầu một dự án bằng C++. Quản lý bộ nhớ trong ngôn ngữ này là điều mới mẻ với tôi. Tôi từng tạo các đối tượng bằng new() rồi truyền con trỏ xung quanh, và mặc dù nó hoạt động, nhưng việc gỡ lỗi rất khó khăn và mọi người nhìn tôi với ánh mắt lạ khi họ nhìn thấy mã. Tôi không có nó cho
Hoàn thành. Câu hỏi này không liên quan đến chủ đề. Hiện tại không chấp nhận câu trả lời. Bạn có muốn cải thiện câu hỏi này không? Cập nhật câu hỏi để phù hợp với chủ đề trên Stack Overflow. Đã đóng cửa 10 năm trước. Cải thiện điều này
Việc giữ các lớp được kết nối lỏng lẻo là một khía cạnh quan trọng của việc viết mã dễ hiểu, dễ sửa đổi và dễ gỡ lỗi - Tôi hiểu điều đó. Tuy nhiên, là người mới, hầu như lúc nào tôi cũng phải vượt ra ngoài ví dụ đơn giản nhất mà tôi đang gặp khó khăn. Tôi ít nhiều hiểu cách đóng gói chuỗi, số nguyên và các kiểu dữ liệu đơn giản.
Tôi thấy rằng mình cần phải viết rất nhiều mã trùng lặp vì tôi không thể gọi các hàm từ các Bộ điều khiển khác. Ví dụ, ở đây nội dung nguồn cấp tin tức được lặp lại trong mã của tôi và tôi thực hiện một số thao tác cụ thể cho một Bộ điều khiển sau đó cần tải nguồn cấp tin tức của tôi như thế này
Giả sử bạn cần một kiểu dữ liệu số có các giá trị được phép nằm trong một phạm vi xác định. Cụ thể hơn, giả sử bạn muốn định nghĩa một kiểu số nguyên có giá trị nhỏ nhất là 0 và giá trị lớn nhất là 5000. Tình huống này phát sinh trong nhiều trường hợp, ví dụ như khi mô hình hóa các kiểu dữ liệu cơ sở dữ liệu, các kiểu dữ liệu XSD. hiện hữu
Giả sử tôi muốn lặp qua mảng để truy cập vào từng phần tử. Có phải thông lệ chuẩn đối với các nhà phát triển JavaScript là sử dụng vòng lặp for, vòng lặp for...in hay vòng lặp for...of không? Ví dụ: var myArray = ["app
Tôi có một ứng dụng SL4/ria cũ mà tôi muốn thay thế bằng Breeze. Tôi có một câu hỏi liên quan đến việc sử dụng bộ nhớ và lưu trữ đệm. Ứng dụng của tôi tải danh sách các công việc (một người dùng thông thường có thể truy cập vào khoảng 1.000 công việc trong số này). Ngoài ra, còn có rất nhiều
Tôi là một lập trình viên xuất sắc, rất giỏi!